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

from odoo import models, api


class ScopAlfrescoAdhesionPartner(models.Model):
    _inherit = 'res.partner'

    # ------------------------------------------------------
    # Actions
    # ------------------------------------------------------
    # Email
    def get_recipients_adhesion(self):
        """
        Get recipients for email adhesion
        :return:
        """
        recipient_ids = self.director_ids or self
        res = ','.join(map(lambda x: str(x), recipient_ids.ids))
        return res

    @api.multi
    def send_mail_adhesion(self):
        """
        Send mail adhésion to coop
        :return:
        """
        self.ensure_one()
        template_id = self.env.ref(
            'cgscop_alfresco_adhesion.email_template_adhesion')
        ir_model_data = self.env['ir.model.data']
        try:
            compose_form_id = ir_model_data.get_object_reference(
                'mail', 'email_compose_message_wizard_form')[1]
        except ValueError:
            compose_form_id = False
        ctx = {
            'default_model': 'res.partner',
            'default_res_id': self.id,
            'default_use_template': True,
            'default_template_id': template_id.id,
            'default_composition_mode': 'comment',
        }
        return {
            'type': 'ir.actions.act_window',
            'view_type': 'form',
            'view_mode': 'form',
            'res_model': 'mail.compose.message',
            'views': [(compose_form_id, 'form')],
            'view_id': compose_form_id,
            'target': 'new',
            'context': ctx,
        }

    # ------------------------------------------------------
    # Override parent
    # ------------------------------------------------------
    @api.multi
    def scop_valid_cg_button(self):
        """
        Inherit button to send mail
        """
        super(ScopAlfrescoAdhesionPartner, self).scop_valid_cg_button()
        return self.send_mail_adhesion()

    @api.multi
    def scop_valid_cg(self):
        """
        Inherit function to :
        - generate files on Alfresco
        """
        res = super(ScopAlfrescoAdhesionPartner, self).scop_valid_cg()

        if not self.partner_id.partner_cmis_folder:
            folder_coop = self.partner_id.create_cmis_folder()
        else:
            folder_coop = self.partner_id.partner_cmis_folder

        # Create & store Facture d'adhésion
        invoice_file = self.env.ref('account.account_invoices'). \
            render_qweb_pdf(res.id)[0]
        self.push_alfresco_file(
            file=invoice_file,
            name="Facture d'Adhésion",
            partner=self,
            type='FAD',
            folder=folder_coop)

        # Create & store Courrier adhésion
        report_adhesion = self.env.ref(
            'cgscop_adhesion.cgscop_adhesion_report'). \
            render_qweb_pdf(self.id)[0]
        self.push_alfresco_file(
            file=report_adhesion,
            name="Courrier d'Adhésion.pdf",
            partner=self,
            type='LDI',
            folder=folder_coop)

        return True

    @api.multi
    def check_compulsory_docs(self):
        """
        Override function to check docs with cmis query
        :return:
        """
        errors = ''
        compulsory_docs = self.env['scop.adhesion.file'].search([
            ('coop_type_id', '=', self.cooperative_form_id.id),
            ('is_compulsory', '=', True)
        ])
        loaded_docs = self.env['scop.adhesion.file'].\
            compulsory_doc_cmis_query(self)

        compulsory_docs_list = compulsory_docs.mapped(lambda d: {'name': d.name, 'metadata': d.type_doc})
        loaded_docs_list = list(map(lambda d: d.properties.get('crm:type'), loaded_docs))
        for madatory_doc in compulsory_docs_list:
            if madatory_doc.get('metadata') not in loaded_docs_list:
                errors += "<li>" + madatory_doc.get('name') + "</li>"

        if errors:
            res = '<hr/><strong>Documents manquants :</strong><u:>' + errors + '</ul>'
            return res
        else:
            return str()