# -*- coding: utf-8 -*-

from odoo import models, fields, api


class SkeenVisita(models.Model):
    _name = 'skeen.visita'
    _description = 'Visita Clínica'
    _order = 'date_start desc'

    # Identificación
    name = fields.Char(string='Referencia', readonly=True, copy=False)
    legacy_id = fields.Char(string='ID Legacy', index=True, copy=False,
                            help='ID de la visita en el sistema legacy SKEEN')

    # Relaciones
    cita_id = fields.Many2one('skeen.cita', string='Cita Origen', ondelete='set null')
    partner_id = fields.Many2one('res.partner', string='Paciente', required=True,
                                  domain=[('is_patient', '=', True)])
    doctor_id = fields.Many2one('hr.employee', string='Médico')
    cosmetologa_id = fields.Many2one('hr.employee', string='Cosmetóloga')
    servicio_id = fields.Many2one('skeen.servicio', string='Servicio')

    # Fechas
    date_start = fields.Datetime(string='Inicio', default=fields.Datetime.now, required=True)
    date_end = fields.Datetime(string='Fin')

    # Datos clínicos
    motivo = fields.Char(string='Motivo de Consulta')
    diagnostico = fields.Text(string='Diagnóstico')
    tratamiento = fields.Text(string='Tratamiento')
    notas = fields.Text(string='Notas')
    receta_text = fields.Text(string='Receta')

    # Estado
    state = fields.Selection([
        ('en_curso', 'En Curso'),
        ('completada', 'Completada'),
        ('cancelada', 'Cancelada'),
    ], string='Estado', default='en_curso', required=True)

    # Origen: creada desde una cita o como consulta médica directa
    origen = fields.Selection([
        ('cita', 'Cita'),
        ('consulta', 'Consulta Directa'),
    ], string='Origen', default='cita', required=True)

    # Insumos (se descargan del inventario al completar la visita)
    insumo_ids = fields.One2many('skeen.visita.insumo', 'visita_id', string='Insumos')
    insumos_descargados = fields.Boolean(string='Insumos Descargados', default=False, readonly=True, copy=False)

    # Adjuntos (fotos antes/después y documentos)
    adjunto_ids = fields.One2many('skeen.visita.adjunto', 'visita_id', string='Adjuntos')

    @api.model_create_multi
    def create(self, vals_list):
        for vals in vals_list:
            if not vals.get('name'):
                vals['name'] = self.env['ir.sequence'].next_by_code('skeen.visita') or 'VIS-00001'
        return super(SkeenVisita, self).create(vals_list)

    def action_complete(self):
        self.write({'state': 'completada', 'date_end': fields.Datetime.now()})
        for visita in self:
            visita._descargar_insumos()

    def _descargar_insumos(self):
        """Crea el movimiento de baja en inventario por cada insumo (una sola vez)"""
        self.ensure_one()
        if self.insumos_descargados:
            return
        Move = self.env['skeen.inventario.move']
        for linea in self.insumo_ids:
            Move.create({
                'item_id': linea.item_id.id,
                'type': 'baja',
                'qty': linea.qty,
                'reference': self.name,
                'notes': 'Consumo en visita',
            })
        self.insumos_descargados = True

    def action_cancel(self):
        self.write({'state': 'cancelada'})
