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

from odoo import fields, models


class MultiPartnerReleaseWizard(models.TransientModel):
    _name = "multi.partner.release.wizard"
    _description = "Wizard de création de release pour plusieurs clients"

    # ------------------------------------------------------
    # Fields declaration
    # ------------------------------------------------------
    user_id = fields.Many2one(
        comodel_name="res.users",
        string="Utilisateur",
        required=True,
        domain=[("share", "=", False)],
        default=lambda self: self.env.user,
    )
    partner_ids = fields.Many2many(
        comodel_name="res.partner",
        string="Client",
        required=True,
        domain=[("is_company", "=", True)],
    )
    release_date = fields.Datetime(
        string="Date de mise en production",
        default=lambda self: fields.Datetime.now(),
    )
    release_module_ids = fields.One2many(
        comodel_name="multi.partner.release.line.wizard",
        inverse_name="release_id",
        string="Modules mis à jour",
    )
    description = fields.Text("Description")

    # ------------------------------------------------------
    # Button actions
    # ------------------------------------------------------
    def create_releases(self):
        for partner in self.partner_ids:
            detail_module = []
            for module in self.release_module_ids:
                detail_module.append(
                    (
                        0,
                        0,
                        {
                            "module_id": module.module_id.id,
                            "release_type": module.release_type,
                            "log": module.log,
                        },
                    )
                )
            partner.write(
                {
                    "release_ids": [
                        (
                            0,
                            0,
                            {
                                "user_id": self.user_id.id,
                                "release_date": self.release_date,
                                "description": self.description,
                                "release_module_ids": detail_module,
                            },
                        )
                    ]
                }
            )
        return {
            "type": "ir.actions.client",
            "tag": "reload",
        }


class MultiPartnerReleaseLineWizard(models.TransientModel):
    _name = "multi.partner.release.line.wizard"
    _description = "Modules de la release"

    # ------------------------------------------------------
    # Fields declaration
    # ------------------------------------------------------
    release_id = fields.Many2one(
        comodel_name="multi.partner.release.wizard",
        string="Releases",
        ondelete="cascade",
        copy=False,
    )
    module_id = fields.Many2one(
        comodel_name="res.partner.module",
        string="Module",
        required=True,
    )
    log = fields.Text("Liste des changements")
    release_type = fields.Selection(
        selection=[
            ("fix", "[fix]"),
            ("update", "[update]"),
            ("add", "[add]"),
            ("clean", "[clean]"),
        ],
        string="Type",
    )