<?php

namespace App\Http\Requests\Leave;

use App\Support\FormTextRules;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Support\Facades\Auth;
use Illuminate\Validation\Rule;

class UpdateLeaveTypeRequest extends FormRequest
{
    public function authorize(): bool
    {
        return true;
    }

    public function rules(): array
    {
        $companyId = Auth::user()?->company_id;
        $leaveTypeId = $this->route('leaveType')?->id ?? $this->route('leave_type')?->id;

        $uniqueShort = Rule::unique('leave_types', 'short_code')->ignore($leaveTypeId);
        if ($companyId) {
            $uniqueShort = $uniqueShort->where(fn ($q) => $q->where('company_id', $companyId));
        }

        return [
            'name' => FormTextRules::notNumericOnly(true, 191),
            'short_code' => ['nullable', 'string', 'max:50', $uniqueShort],
            'description' => FormTextRules::notNumericOnly(false, 5000),
            'leave_count' => ['nullable', 'integer', 'min:0'],
            'is_unlimited' => ['nullable', 'boolean'],
            'weekend_policy' => ['required', Rule::in(['include', 'exclude'])],
            'holiday_policy' => ['required', Rule::in(['include', 'exclude'])],
            'probation_allowed' => ['nullable', 'boolean'],
            'notice_period_allowed' => ['nullable', 'boolean'],
            'is_paid' => ['nullable', 'boolean'],
        ];
    }

    public function messages(): array
    {
        return FormTextRules::messages();
    }
}

