<?php

namespace App\Http\Controllers\Api;

use App\Http\Controllers\ApiBaseController;
use App\Models\Vendor;
use Examyou\RestAPI\Exceptions\ApiException;
use App\Http\Requests\Api\Vendor\IndexRequest;
use App\Http\Requests\Api\Vendor\StoreRequest;
use App\Http\Requests\Api\Vendor\UpdateRequest;
use App\Http\Requests\Api\Vendor\DeleteRequest;

class VendorController extends ApiBaseController
{
    protected $model = Vendor::class;

    protected $indexRequest = IndexRequest::class;
    protected $storeRequest = StoreRequest::class;
    protected $updateRequest = UpdateRequest::class;
    protected $deleteRequest = DeleteRequest::class;

    /**
     * Called when storing vendor
     */
    public function storing(Vendor $vendor)
    {
        $loggedUser = user();
        if ($vendor->isFillable('created_by')) {
            $vendor->created_by = $loggedUser->id;
        }
        return $vendor;
    }

    /**
     * Called when updating vendor
     */
    public function updating(Vendor $vendor)
    {
        $loggedUser = user();
        if ($vendor->isFillable('updated_by')) {
            $vendor->updated_by = $loggedUser->id;
        }

        return $vendor;
    }

    /**
     * Called before deleting vendor
     */
    public function destroying($vendor)
    {
        // Example rule:
        // If vendor is linked to staff, prevent delete
        if (method_exists($vendor, 'staff') && $vendor->staff()->count() > 0) {
            throw new ApiException('Vendor assigned to staff cannot be deleted.');
        }

        return $vendor;
    }
}
