# -*- coding: utf-8 -*-
from odoo import models, fields, api
from odoo.exceptions import ValidationError

class ProductTemplate(models.Model):
    _inherit = 'product.template'

    is_analysis = fields.Boolean(
        string="Es un Análisis Clínico",
        help="Marcar si este producto es un análisis clínico."
    )
    analysis_type = fields.Selection([
        ('hematology', 'Hematología'),
        ('chemistry', 'Química Clínica'),
        ('microbiology', 'Microbiología'),
        ('immunology', 'Inmunología'),
        ('endocrinology', 'Endocrinología'),
        ('other', 'Otro')
    ], string="Tipo de Análisis")
    
    technical_specifications = fields.Text(
        string="Especificaciones Técnicas"
    )

    value_range_ids = fields.One2many(
        'lims.analysis.range',
        'analysis_id',
        string="Rangos de Referencia"
    )
    
    parameter_ids = fields.One2many(
        'product.template.parameter',
        'product_tmpl_id',
        string="Parámetros del Análisis",
        help="Parámetros que se medirán en este análisis"
    )

    is_sample_type = fields.Boolean(
        string="Es Tipo de Muestra",
        help="Marcar si este producto representa un tipo de contenedor de muestra de laboratorio."
    )
    
    required_sample_type_id = fields.Many2one(
        'product.template',
        string='Tipo de Muestra Requerida',
        domain="[('is_sample_type', '=', True)]",
        help="Tipo de muestra/contenedor requerido para realizar este análisis"
    )
    
    sample_volume_ml = fields.Float(
        string='Volumen Requerido (ml)',
        help="Volumen de muestra requerido en mililitros para realizar este análisis"
    )
    
    @api.constrains('required_sample_type_id', 'is_analysis')
    def _check_sample_type_for_analysis(self):
        for product in self:
            if product.required_sample_type_id and not product.is_analysis:
                raise ValidationError("Solo los productos marcados como 'Es un Análisis Clínico' pueden tener un tipo de muestra requerida.")
    
    @api.constrains('sample_volume_ml', 'is_analysis')
    def _check_volume_for_analysis(self):
        for product in self:
            if product.sample_volume_ml and not product.is_analysis:
                raise ValidationError("Solo los productos marcados como 'Es un Análisis Clínico' pueden tener un volumen requerido.")
