<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Support\Facades\Storage;

class Inventario extends Model
{
    protected $table = 'inventarios';

    protected $fillable = [
        'codigo', 'nombre', 'descripcion', 'foto_path', 'categoria_id', 'departamento_id',
        'unidad_id', 'proveedor_id', 'tipo_impuesto_id', 'precio',
        'stock_actual', 'stock_min', 'stock_max', 'active',
    ];

    protected function casts(): array
    {
        return [
            'precio' => 'decimal:2',
            'active' => 'boolean',
        ];
    }

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

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

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

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

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

    public function movimientos(): HasMany
    {
        return $this->hasMany(MovimientoInventario::class);
    }

    public function bajoMinimo(): bool
    {
        return $this->stock_actual <= $this->stock_min;
    }

    public function fotoUrl(): ?string
    {
        return $this->foto_path ? Storage::disk('public')->url($this->foto_path) : null;
    }
}
