<?php

namespace App\Http\Requests\Admin;

use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Validation\Rule;

class InvoiceBillingStoreRequest extends FormRequest
{
    /**
     * Determine if the user is authorized to make this request.
     */
    public function authorize(): bool
    {
        return $this->user()->can('create', \App\Models\InvoiceBilling::class);
    }

    /**
     * Get the validation rules that apply to the request.
     *
     * @return array<string, \Illuminate\Contracts\Validation\ValidationRule|array<mixed>|string>
     */
    public function rules(): array
    {
        return [
            'name' => [
                'required',
                'string',
                'max:50',
                'regex:/^[a-z0-9_-]+$/',
                Rule::unique('invoice_billings', 'name'),
            ],
            'display_name' => 'required|string|max:255',
            'type' => ['required', 'string', Rule::in(['e-invoice', 'e-archive'])],
            'is_active' => 'boolean',
            'is_automatic' => 'boolean',
            'status' => ['nullable', 'string', Rule::in(['active', 'inactive', 'error'])],
            'settings' => 'nullable|array',
            'mapping_fields' => 'nullable|array',
        ];
    }

    /**
     * Get custom messages for validator errors.
     */
    public function messages(): array
    {
        return [
            'name.required' => 'Modül adı zorunludur.',
            'name.string' => 'Modül adı metin olmalıdır.',
            'name.max' => 'Modül adı en fazla 50 karakter olabilir.',
            'name.regex' => 'Modül adı sadece küçük harf, rakam, tire ve alt çizgi içerebilir.',
            'name.unique' => 'Bu modül adı zaten kullanılıyor.',
            'display_name.required' => 'Görünen ad zorunludur.',
            'display_name.string' => 'Görünen ad metin olmalıdır.',
            'display_name.max' => 'Görünen ad en fazla 255 karakter olabilir.',
            'type.required' => 'Modül tipi zorunludur.',
            'type.in' => 'Geçersiz modül tipi.',
            'is_active.boolean' => 'Aktif durumu boolean olmalıdır.',
            'is_automatic.boolean' => 'Otomatik durumu boolean olmalıdır.',
            'status.in' => 'Geçersiz durum.',
            'settings.array' => 'Ayarlar dizi olmalıdır.',
            'mapping_fields.array' => 'Eşleştirme alanları dizi olmalıdır.',
        ];
    }

    /**
     * Get custom attributes for validator errors.
     */
    public function attributes(): array
    {
        return [
            'name' => 'modül adı',
            'display_name' => 'görünen ad',
            'type' => 'modül tipi',
            'is_active' => 'aktif durumu',
            'is_automatic' => 'otomatik durumu',
            'status' => 'durum',
            'settings' => 'ayarlar',
            'mapping_fields' => 'eşleştirme alanları',
        ];
    }
}
