# -*- coding: utf-8 -*-

import hashlib
import json

from odoo import api, models
from odoo.http import request
from odoo.tools import ustr

from odoo.addons.web.controllers.main import module_boot, HomeStaticTemplateHelpers

import odoo


class Http(models.AbstractModel):
    _inherit = 'ir.http'

    def session_info(self):
        user = request.env.user
        version_info = odoo.service.common.exp_version()

        user_context = request.session.get_context(
        ) if request.session.uid else {}

        session_info = {
            "uid":
            request.session.uid,
            "is_system":
            user._is_system() if request.session.uid else False,
            "is_admin":
            user._is_admin() if request.session.uid else False,
            "user_context":
            request.session.get_context() if request.session.uid else {},
            "db":
            request.session.db,
            "server_version":
            version_info.get('server_version'),
            "server_version_info":
            version_info.get('server_version_info'),
            "name":
            user.name,
            "username":
            user.login,
            "partner_display_name":
            user.partner_id.display_name,
            # YTI TODO: Remove this from the user context
            "company_id":
            user.company_id.id if request.session.uid else None,
            "partner_id":
            user.partner_id.id
            if request.session.uid and user.partner_id else None,
            "web.base.url":
            self.env['ir.config_parameter'].sudo().get_param('web.base.url',
                                                             default=''),
            'theme': {
                'color': user.theme_color,
                'launcher_bg_status': user.launcher_bg_status,
                'launcher_bg': user.launcher_bg,
                'submenu_position': user.submenu_position,
                'sidebar_mode': user.sidebar_mode,
                'sidebar_position': user.sidebar_position,
                'footer': user.theme_footer,
            }
        }
        if self.env.user.has_group('base.group_user'):
            # the following is only useful in the context of a webclient bootstrapping
            # but is still included in some other calls (e.g. '/web/session/authenticate')
            # to avoid access errors and unnecessary information, it is only included for users
            # with access to the backend ('internal'-type users)
            mods = module_boot()
            qweb_checksum = HomeStaticTemplateHelpers.get_qweb_templates_checksum(
                addons=mods, debug=request.session.debug)
            lang = user_context.get("lang")
            translation_hash = request.env[
                'ir.translation'].get_web_translations_hash(mods, lang)
            menu_json_utf8 = json.dumps(request.env['ir.ui.menu'].load_menus(
                request.session.debug),
                                        default=ustr,
                                        sort_keys=True).encode()
            cache_hashes = {
                "load_menus": hashlib.sha1(menu_json_utf8).hexdigest(),
                "qweb": qweb_checksum,
                "translations": translation_hash,
            }
            session_info.update({
                # current_company should be default_company
                "user_companies": {
                    'current_company':
                    (user.company_id.id, user.company_id.name),
                    'allowed_companies':
                    [(comp.id, comp.name) for comp in user.company_ids]
                },
                "currencies":
                self.get_currencies(),
                "show_effect":
                True,
                "display_switch_company_menu":
                user.has_group('base.group_multi_company')
                and len(user.company_ids) > 1,
                "cache_hashes":
                cache_hashes,
            })
        return session_info
