<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Stock extends Model
{
    protected $fillable = [
        'fibre_type_id',
        'quantity',
    ];

    protected $casts = [
        'quantity' => 'decimal:2',
    ];

    public function fibreType()
    {
        return $this->belongsTo(FibreType::class);
    }

    public function isLowStock($threshold = 10)
    {
        return $this->quantity <= $threshold;
    }

    public function getStockStatusAttribute()
    {
        if ($this->quantity == 0) {
            return 'out_of_stock';
        } elseif ($this->quantity <= 10) {
            return 'low_stock';
        } elseif ($this->quantity <= 50) {
            return 'medium_stock';
        } else {
            return 'good_stock';
        }
    }

    /**
     * Ajuster le stock directement sans créer de mouvement
     * Utile pour corriger des erreurs de comptage physique
     * 
     * @param float $newQuantity La nouvelle quantité de stock
     * @return bool
     */
    public function adjustStock(float $newQuantity): bool
    {
        if ($newQuantity < 0) {
            throw new \InvalidArgumentException('La quantité ne peut pas être négative.');
        }

        $this->quantity = $newQuantity;
        return $this->save();
    }

    /**
     * Réinitialiser le stock à zéro sans créer de mouvement
     * 
     * @return bool
     */
    public function resetStock(): bool
    {
        return $this->adjustStock(0);
    }
}
