<?php

namespace App\Http\Requests;

use App\Models\Asset;
use Illuminate\Support\Facades\Gate;
use Illuminate\Validation\Rule;

class UpdateAssetRequest extends ImageUploadRequest
{
    /**
     * Determine if the user is authorized to make this request.
     *
     * @return bool
     */
    public function authorize()
    {
        return Gate::allows('update', new Asset);
    }

    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    public function rules()
    {
        $rules = array_merge([
            'model_id' => ['integer', 'exists:models,id,deleted_at,NULL', 'not_array'],
            'status_id' => ['integer', 'exists:status_labels,id'],
            'asset_tag' => ['min:1', 'max:255', 'not_array', Rule::unique('assets', 'asset_tag')->ignore($this->asset)->withoutTrashed()],
            'name' => ['nullable', 'max:255'],
            'company_id' => ['nullable', 'integer', 'exists:companies,id'],
            'warranty_months' => ['nullable', 'numeric', 'digits_between:0,240'],
            'last_checkout' => ['nullable', 'date_format:Y-m-d H:i:s'],
            'expected_checkin' => ['nullable', 'date'],
            'last_audit_date' => 'nullable|date_format:Y-m-d H:i:s',
            'next_audit_date' => 'nullable|date|after:last_audit_date',
            'location_id' => ['nullable', 'exists:locations,id'],
            'rtd_location_id' => ['nullable', 'exists:locations,id'],
            'purchase_date' => ['nullable', 'date', 'date_format:Y-m-d'],
            'serial' => ['nullable', 'unique_undeleted:assets,serial'],
            'purchase_cost' => ['nullable', 'numeric', 'gte:0'],
            'supplier_id' => ['nullable', 'exists:suppliers,id'],
            'asset_eol_date' => ['nullable', 'date'],
            'eol_explicit' => ['nullable', 'boolean'],
            'byod' => ['nullable', 'boolean'],
            'order_number' => ['nullable', 'string', 'max:191'],
            'notes' => ['nullable', 'string', 'max:65535'],
            'assigned_to' => ['nullable', 'integer'],
            'requestable' => ['nullable', 'boolean'],
        ],
            parent::rules()
        );
        return $rules;
    }
}