# Copyright 2022 Le Filament (<http://www.le-filament.com>)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).

from odoo import api, fields, models


class AccContract(models.Model):
    _name = "acc.contract"
    _inherit = ["portal.mixin"]
    _description = "Contrats"

    # ------------------------------------------------------
    # Fields declaration
    # ------------------------------------------------------
    acc_operation_id = fields.Many2one("acc.operation", "Opération")
    seller_id = fields.Many2one("res.partner", "Contractant 1")
    buyer_id = fields.Many2one("res.partner", "Contractant 2")
    type = fields.Selection(
        [
            ("vente_achat", "Achat/Vente"),
            ("convention", "Convention Enedis"),
            ("pmo", "Pmo"),
            ("facture", "Facture importée"),
            ("all", "Contrat pour tous"),
            ("other", "Autre document"),
        ],
        string="Type de contrat",
    )
    start_date = fields.Date("Début du contrat")
    end_date = fields.Date("Fin du contrat")
    document = fields.Binary("Document attaché", required=True, attachment=True)
    name = fields.Char("Nom du document")
    # ------------------------------------------------------
    # SQL Constraints
    # ------------------------------------------------------

    # ------------------------------------------------------
    # Default methods
    # ------------------------------------------------------

    # ------------------------------------------------------
    # Computed fields / Search Fields
    # ------------------------------------------------------

    # ------------------------------------------------------
    # Onchange / Constraints
    # ------------------------------------------------------

    # ------------------------------------------------------
    # CRUD methods (ORM overrides)
    # ------------------------------------------------------
    @api.model_create_multi
    def create(self, vals_list):
        docs = super(AccContract, self).create(vals_list)

        for doc in docs:
            operation_id = doc.acc_operation_id
            if doc.seller_id:
                user_seller = self.env["res.users"].search(
                    [("partner_id", "=", doc.seller_id.id)]
                )
                if user_seller.has_group("base.group_portal"):
                    template = self.env.ref(
                        "acc_operation.email_template_document",
                        raise_if_not_found=False,
                    )
                    template.with_context(operation_id=operation_id.description).send_mail(doc.seller_id.id, force_send=True)
            if doc.buyer_id:
                user_buyer = self.env["res.users"].search(
                    [("partner_id", "=", doc.buyer_id.id)]
                )
                if user_buyer.has_group("base.group_portal"):
                    template = self.env.ref(
                        "acc_operation.email_template_document",
                        raise_if_not_found=False,
                    )
                    template.with_context(operation_id=operation_id.description).send_mail(doc.buyer_id.id, force_send=True)
        return docs

    # ------------------------------------------------------
    # Actions
    # ------------------------------------------------------

    # ------------------------------------------------------
    # Business methods
    # ------------------------------------------------------
    def _compute_access_url(self):
        super(AccContract, self)._compute_access_url()
        for contract in self:
            contract.access_url = "/contract/%s" % (contract.id)