<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;

class OrdenLavanderiaDetalle extends Model
{
    use HasFactory;

    protected $table = 'orden_lavanderia_detalles';
    // C1: modelo mixto compatible. Nuevas líneas TIBU usan service/garment/load con producto_id null;
    // filas legacy pueden seguir referenciando `productos` para histórico.
    // ADR-001: líneas POS por catálogo usan laundry_sale_product_id (flujo nuevo).

    public const BILLING_BY_GARMENT_TYPE = 'by_garment_type';

    public const BILLING_BY_WEIGHT = 'by_weight';

    protected $fillable = [
        'orden_lavanderia_id',
        'etapa_id',
        'producto_id',
        'garment_type_id',
        'laundry_sale_product_id',
        'load_type_id',
        'billing_mode',
        'weight_kg',
        'cantidad',
        'cantidad_cobro',
        'precio_unitario',
        'subtotal',
        'observations',
        'is_informational',
        'extra_cost',
    ];

    protected $casts = [
        'cantidad' => 'decimal:3',
        'cantidad_cobro' => 'decimal:3',
        'precio_unitario' => 'decimal:2',
        'subtotal' => 'decimal:2',
        'weight_kg' => 'decimal:3',
        'is_informational' => 'boolean',
        'extra_cost' => 'decimal:2',
    ];

    public function ordenLavanderia(): BelongsTo
    {
        return $this->belongsTo(OrdenLavanderia::class, 'orden_lavanderia_id');
    }

    public function producto(): BelongsTo
    {
        return $this->belongsTo(Producto::class);
    }

    public function etapa(): BelongsTo
    {
        return $this->belongsTo(Etapa::class, 'etapa_id');
    }

    public function garmentType(): BelongsTo
    {
        return $this->belongsTo(GarmentType::class, 'garment_type_id');
    }

    public function laundrySaleProduct(): BelongsTo
    {
        return $this->belongsTo(LaundrySaleProduct::class, 'laundry_sale_product_id');
    }

    public function loadType(): BelongsTo
    {
        return $this->belongsTo(LoadType::class, 'load_type_id');
    }
}
