from markupsafe import Markup

from odoo import api, fields, models


class XenoLeaveApproverPreview(models.TransientModel):
    _name = "xeno.leave.approver.preview"
    _description = "Preview the approval chain that would apply to an employee right now"

    employee_id = fields.Many2one("hr.employee", required=True)
    chain_html = fields.Html(compute="_compute_chain_html", sanitize=False)

    @api.depends("employee_id")
    def _compute_chain_html(self):
        Approver = self.env["xeno.leave.approver"]
        for wizard in self:
            if not wizard.employee_id:
                wizard.chain_html = Markup("<p>Select an employee.</p>")
                continue
            steps = Approver.build_chain(wizard.employee_id)
            Users = self.env["res.users"].sudo()
            rows = []
            for step in steps:
                approver_name = (
                    Users.browse(step["approver_user_id"]).name
                    if step["approver_user_id"] else "Any HR/Admin"
                )
                rows.append(Markup(
                    "<li><strong>Step %(order)s — %(label)s:</strong> %(approver)s</li>"
                ) % {
                    "order": step["step_order"],
                    "label": step["label"],
                    "approver": approver_name,
                })
            wizard.chain_html = Markup("<ol>%s</ol>") % Markup("").join(rows)
