<?php

namespace App\Observers;

use App\Models\StockMovement;
use Illuminate\Support\Facades\Log;

class StockMovementObserver
{
    /**
     * Handle the StockMovement "created" event.
     */
    public function created(StockMovement $stockMovement): void
    {
        $this->updateProductStock($stockMovement);
    }

    /**
     * Handle the StockMovement "updated" event.
     */
    public function updated(StockMovement $stockMovement): void
    {
        $this->updateProductStock($stockMovement);
    }

    /**
     * Handle the StockMovement "deleted" event.
     */
    public function deleted(StockMovement $stockMovement): void
    {
        $this->updateProductStock($stockMovement);
    }

    /**
     * Update product stock when stock movement changes
     */
    private function updateProductStock(StockMovement $stockMovement): void
    {
        try {
            if ($stockMovement->product) {
                $stockMovement->product->updateCurrentStock();
            }
        } catch (\Exception $e) {
            Log::error('Failed to update product stock', [
                'product_id' => $stockMovement->product_id,
                'stock_movement_id' => $stockMovement->id,
                'error' => $e->getMessage()
            ]);
        }
    }
}