# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html).

from odoo import fields, models, modules
from odoo.exceptions import UserError

MODULE_FIELDS = [
    "module_l10n_ru_act_rev",
    "module_l10n_ru_contract",
    "module_l10n_ru_upd_xml",
    "module_l10n_ru_doc",
    "module_l10n_ru_attorney",
]


class ResConfigSettings(models.TransientModel):
    _inherit = "res.config.settings"

    module_l10n_ru_act_rev = fields.Boolean(
        string="Акты сверки", help="Создание актов сверки"
    )
    module_l10n_ru_contract = fields.Boolean(
        string="Договоры", help="Управление договорами"
    )
    module_l10n_ru_upd_xml = fields.Boolean(
        string="Экспорт УПД", help="Экспорт УПД в формате XML"
    )
    module_l10n_ru_doc = fields.Boolean(
        string="Печатные формы", help="Формирование документов"
    )
    module_l10n_ru_attorney = fields.Boolean(
        string="Доверенности", help="Оформление доверенностей"
    )

    def write(self, values):
        if self.env.company.country_id.code != "RU":
            raise UserError("Признак Российской компании не обнаружен.")

        # Проверяем наличие модуля в addons path,
        # чтобы избежать ситуации, когда модуль присутствует в базе, но фактически удалён
        missing_modules = {
            field[7:]
            for field in MODULE_FIELDS
            if self.mapped(field)[0] and not modules.get_module_path(field[7:])
        }

        if missing_modules:
            raise UserError(
                "Обратитесь в тех.поддержку для получения лицензии для следующих модулей:\n{}".format(
                    "\n".join(missing_modules)
                )
            )

        return super().write(values)