from odoo import api, fields, models


class HrEmployee(models.Model):
    _inherit = "hr.employee"

    xeno_employee_code = fields.Char(
        string="HRSystem Employee Code", index=True, copy=False,
        # groups= required: custom stored hr.employee fields without a
        # group restriction break any employee read by a non-HR user
        # (Odoo prefetches all stored fields and hr.employee.public's
        # private-fields check rejects fields it doesn't know).
        groups="hr.group_hr_user",
        help="employee_code from HRSystem's employees table (same code "
             "scheme printed on the Monthly Attendance report: 10XXXX "
             "hired before 2023, 20XXXX from 2023, 30XXXX maintenance/"
             "cleaners, 40XXXX interns). Bridges this record to HRSystem "
             "without relying on name or email matching.")

    _xeno_employee_code_uniq = models.Constraint(
        "unique(xeno_employee_code)",
        "This HRSystem employee code is already linked to another employee.",
    )

    xeno_employee_type_id = fields.Many2one(
        "xeno.employee.type", string="Employee Type", groups="hr.group_hr_user",
        help="Mirrors XENHR's Employee Types setting. For an employee "
             "created directly in Odoo (post-cutover, no HRSystem code to "
             "bridge to) with no xeno_employee_code already given, sets "
             "one automatically from this type's prefix + next sequence "
             "number on creation. Never regenerates or overwrites an "
             "existing code, and has no effect on employees already "
             "linked to a real HRSystem code.")

    @api.model_create_multi
    def create(self, vals_list):
        for vals in vals_list:
            if vals.get("xeno_employee_type_id") and not vals.get("xeno_employee_code"):
                emp_type = self.env["xeno.employee.type"].browse(
                    vals["xeno_employee_type_id"])
                vals["xeno_employee_code"] = emp_type._xeno_next_code()
        return super().create(vals_list)
