<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use App\Traits\BelongsToSucursal;

class CajaMovimiento extends Model
{
    use HasFactory, BelongsToSucursal;

    protected $table = 'caja_movimientos';

    public $timestamps = false;

    protected $fillable = [
        'sesion_id',
        'sucursal_id',
        'tipo',
        'concepto',
        'categoria',
        'monto',
        'subtotal',
        'igv',
        'referencia_tipo',
        'referencia_id',
        'comprobante_tipo',
        'comprobante_numero',
        'ruc_cliente',
        'razon_social_cliente',
        'anulado',
        'anulado_por',
        'anulado_at',
        'motivo_anulacion',
        'user_id',
        'created_at',
    ];

    protected $casts = [
        'monto' => 'decimal:2',
        'subtotal' => 'decimal:2',
        'igv' => 'decimal:2',
        'anulado' => 'boolean',
        'anulado_at' => 'datetime',
        'created_at' => 'datetime',
    ];

    // ── RELACIONES ───────────────────────────────────────────────────

    public function sesion(): BelongsTo
    {
        return $this->belongsTo(CajaSesion::class, 'sesion_id');
    }

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

    public function registradoPor(): BelongsTo
    {
        return $this->belongsTo(User::class, 'user_id');
    }

    public function anuladoPor(): BelongsTo
    {
        return $this->belongsTo(User::class, 'anulado_por');
    }
}
