<?php

namespace App\Http\Requests\Admin;

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

class BuketRequest extends FormRequest
{
    public function authorize(): bool
    {
        // Ubah jadi true supaya request diizinkan
        return true;
    }

    public function rules(): array
    {
        return [
            'nama'           => 'required|string|min:3|max:100',
            'ukuran'         => 'required|in:S,M,L',
            'kategori'       => 'required|in:single,fresh,premium_fresh,artificial',
            'harga'          => 'required|numeric|min:0',
            'request_khusus' => 'nullable|string|max:255',
            'deskripsi'      => 'required|string|min:10',
            // Dinamis: required jika store (POST), nullable jika update (PUT)
            'foto'           => $this->isMethod('post')
                ? 'required|image|mimes:jpeg,png,jpg|max:2048'
                : 'nullable|image|mimes:jpeg,png,jpg|max:2048',
        ];
    }

    public function messages(): array
    {
        return [
            'required' => 'Kolom :attribute tidak boleh kosong.',
            'string'   => 'Input :attribute harus berupa teks valid.',
            'min'      => ':attribute terlalu pendek, minimal harus :min karakter.',
            'max'      => ':attribute melebihi batas, maksimal :max karakter/KB.',
            'in'       => 'Pilihan :attribute tidak sesuai dengan data yang tersedia.',
            'numeric'  => ':attribute harus berupa angka.',
            'image'    => ':attribute harus berupa file gambar (foto).',
            'mimes'    => 'Format :attribute tidak didukung. Gunakan format: jpeg, png, atau jpg.',
            'foto.max' => 'Ukuran :attribute terlalu besar, maksimal adalah 2MB.',
        ];
    }

    public function attributes(): array
    {
        return [
            'nama'           => 'nama buket',
            'ukuran'         => 'ukuran buket',
            'kategori'       => 'kategori buket',
            'harga'          => 'harga',
            'request_khusus' => 'request khusus',
            'deskripsi'      => 'deskripsi produk',
            'foto'           => 'foto produk',
        ];
    }

    /**
     * Trik untuk Modal: Mengembalikan error ke modal yang tepat
     */
    protected function failedValidation(Validator $validator)
    {
        $redirect = redirect()->back()->withErrors($validator)->withInput();

        if ($this->isMethod('post')) {
            $redirect->with('error_modal', 'create');
        } else {
            // Mengambil ID dari parameter route untuk modal edit
            $redirect->with('error_id', $this->route('buket'));
        }

        throw new HttpResponseException($redirect);
    }
}
