from odoo import fields, models


class DirectiveTemplate(models.Model):
    _name = "directive.template"
    _description = "Directive Template"
    _order = "name asc, id desc"

    PRIORITY = [
        ("0", "Low"),
        ("1", "Normal"),
        ("2", "High"),
    ]

    name = fields.Char(string="Название шаблона директивы", required=True)
    code = fields.Char(string="Технический код", required=True, index=True)
    active = fields.Boolean(string="Активен", default=True)

    sequence = fields.Integer(string="Порядок", default=10)

    work_type_id = fields.Many2one(
        "directive.work.type",
        string="Тип работ",
        required=True,
        ondelete="restrict",
        index=True,
    )

    planned_hours = fields.Float(string="Трудоёмкость", required=True)
    load_percent = fields.Integer(string="Процент загрузки", default=10)

    priority = fields.Selection(
        selection=PRIORITY,
        string="Приоритет",
        default="0",
        required=True,
    )

    executor_role_id = fields.Many2one(
        "res.users.role",
        string="Роль исполнителя (по умолчанию)",
        ondelete="restrict",
        index=True,
    )
    requester_role_id = fields.Many2one(
        "res.users.role",
        string="Роль заявителя (по умолчанию)",
        ondelete="restrict",
        index=True,
    )

    default_stage_id = fields.Many2one(
        "directive.stage",
        string="Стартовый статус",
        default=lambda self: self.env["directive.stage"].search([("code", "=", "draft")], limit=1),
        ondelete="restrict",
        index=True,
    )

    handler_key = fields.Char(
        string="Handler key",
        help="Например: project.task.collect_ft (метод модели источника)",
    )

    description = fields.Text(string="Описание/инструкции")

    _sql_constraints = [
        ("directive_template_code_uniq", "unique(code)", "Template code must be unique."),
    ]
