from odoo import api, fields, models


class RelsumMachine(models.Model):
    """Máquina del cliente (alternador, motor, grupo electrógeno…).

    Una máquina puede tener N OTs históricas — permite trazabilidad cruzada
    por número de serie a lo largo de los años.
    """
    _name = 'relsum.machine'
    _description = 'Máquina del cliente'
    _inherit = ['mail.thread', 'mail.activity.mixin']
    _order = 'marca, tipo, numero_serie'

    name = fields.Char(
        string='Identificación',
        compute='_compute_name',
        store=True,
        index=True,
    )

    # =========================
    # IDENTIFICACIÓN
    # =========================

    marca = fields.Char(string='Marca', tracking=True)
    tipo = fields.Char(string='Tipo / Modelo', tracking=True)
    numero_serie = fields.Char(string='Nº de serie', index=True, tracking=True)

    # =========================
    # CARACTERÍSTICAS ELÉCTRICAS
    # =========================

    voltios = fields.Float(string='Voltios (V)', digits=(10, 2))
    kva = fields.Float(string='Potencia (kVA)', digits=(10, 2))
    rpm = fields.Float(string='RPM', digits=(10, 0))
    amperios = fields.Float(string='Amperios (A)', digits=(10, 2))
    hz = fields.Float(string='Frecuencia (Hz)', digits=(10, 2))

    # =========================
    # PROPIEDAD Y UBICACIÓN
    # =========================

    partner_id = fields.Many2one(
        'res.partner',
        string='Propietario',
        tracking=True,
        index=True,
    )
    planta_id = fields.Many2one(
        'res.partner',
        string='Planta / Ubicación',
        domain="[('parent_id', '=', partner_id)]",
        tracking=True,
        help='Sede del cliente donde está instalada la máquina (contacto hijo del propietario).'
    )

    # =========================
    # HISTORIAL DE OTS
    # =========================

    repair_order_ids = fields.One2many(
        'repair.order',
        'relsum_machine_id',
        string='Histórico de OTs',
    )
    repair_count = fields.Integer(
        string='Nº de OTs',
        compute='_compute_repair_count',
    )

    notes = fields.Text(string='Notas')
    active = fields.Boolean(default=True)

    # =========================
    # COMPUTES
    # =========================

    @api.depends('marca', 'tipo', 'numero_serie')
    def _compute_name(self):
        for rec in self:
            parts = [p for p in (rec.marca, rec.tipo, rec.numero_serie) if p]
            rec.name = ' / '.join(parts) if parts else '(sin identificar)'

    @api.depends('repair_order_ids')
    def _compute_repair_count(self):
        for rec in self:
            rec.repair_count = len(rec.repair_order_ids)

    # =========================
    # ACTIONS
    # =========================

    def action_view_repair_orders(self):
        self.ensure_one()
        return {
            'type': 'ir.actions.act_window',
            'name': 'OTs de %s' % self.name,
            'res_model': 'repair.order',
            'view_mode': 'list,form',
            'domain': [('id', 'in', self.repair_order_ids.ids)],
        }
