<?php

namespace App\Http\Requests\Admin;

use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Contracts\Validation\Validator;
use Illuminate\Http\Exceptions\HttpResponseException;

class AdminRequest extends FormRequest
{
    public function authorize(): bool
    {
        // Pastikan ini true agar request diproses
        return true;
    }

    public function rules(): array
    {
        // Mengambil ID dari route untuk pengecualian 'unique' saat update
        $adminId = $this->route('id');

        return [
            'nama'     => 'required|string|min:5|max:100',
            'username' => 'required|string|alpha_dash|max:50|unique:users,username,' . $adminId . ',id_user',
            'email'    => 'required|email:dns|max:255|unique:users,email,' . $adminId . ',id_user',
            'no_wa'    => 'required|numeric|digits_between:10,15',
            'role'     => 'required|in:admin_foto,admin_buket',
            'alamat'   => 'required|string|max:255',
        ];
    }

    public function messages(): array
    {
        return [
            'required'       => 'Kolom :attribute wajib diisi.',
            'unique'         => ':attribute sudah terdaftar di sistem, gunakan yang lain.',
            'min'            => ':attribute minimal harus berisi :min karakter.',
            'max'            => ':attribute maksimal hanya boleh :max karakter.',
            'numeric'        => ':attribute harus berupa angka.',
            'digits_between' => ':attribute harus berjumlah antara :min sampai :max digit.',
            'email'          => 'Format :attribute tidak valid.',
            'alpha_dash'     => ':attribute hanya boleh berisi huruf, angka, serta simbol - dan _',
            'in'             => ':attribute yang dipilih tidak sesuai pilihan yang tersedia.',
        ];
    }

    public function attributes(): array
    {
        return [
            'nama'     => 'nama lengkap',
            'username' => 'username',
            'email'    => 'alamat email',
            'no_wa'    => 'nomor WA',
            'role'     => 'peran admin',
            'alamat'   => 'alamat lengkap',
        ];
    }

    /**
     * Penanganan khusus agar Modal tetap terbuka saat validasi gagal.
     */
    protected function failedValidation(Validator $validator)
    {
        $redirect = redirect()->back()->withErrors($validator)->withInput();

        if ($this->isMethod('post')) {
            $redirect->with('error_modal', 'create');
        } else {
            $redirect->with('error_id', $this->route('id'));
        }

        throw new HttpResponseException($redirect);
    }
}
