<?php

namespace App\Http\Controllers\Admin;

use App\Http\Controllers\Controller;
use App\Models\Buket;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;
use Illuminate\Support\Facades\Storage;

class BuketController extends Controller
{
    public function index()
    {
        $buket = Buket::latest()->get();

        return view('admin.produk-buket.index', compact('buket'));
    }

    public function store(Request $request)
    {
        $validator = Validator::make($request->all(), [
            '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',
            'foto'           => 'required|image|mimes:jpeg,png,jpg|max:2048',
        ], [
            // Detail Pesan Kustom menggunakan :attribute
            '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.',
            'max.file'   => 'Ukuran :attribute terlalu besar, maksimal adalah 2MB.',
        ], [
            // Alias Atribut agar pesan lebih ramah pengguna
            'nama'           => 'nama buket',
            'ukuran'         => 'ukuran buket',
            'kategori'       => 'kategori buket',
            'harga'          => 'harga',
            'request_khusus' => 'request khusus',
            'deskripsi'      => 'deskripsi produk',
            'foto'           => 'foto produk',
        ]);
        if ($validator->fails()) {
            return redirect()->back()
                ->withErrors($validator)
                ->withInput()
                ->with('error_modal', 'create');
        }

        $path = null;
        if ($request->hasFile('foto')) {
            $file = $request->file('foto');
            $filename = time() . '_' . $file->getClientOriginalName();
            $path = $file->storeAs('img/buket', $filename, 'public');
        }

        Buket::create([
            'nama'           => $request->nama,
            'ukuran'         => $request->ukuran,
            'kategori'       => $request->kategori,
            'harga'          => $request->harga,
            'request_khusus' => $request->request_khusus,
            'deskripsi'      => $request->deskripsi,
            'foto'           => $path,
        ]);

        return redirect()->back()->with('success', 'Produk buket berhasil ditambahkan!');
    }

    public function update(Request $request, string $id)
    {
        $buket = Buket::findOrFail($id);

        $validator = Validator::make($request->all(), [
            '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',
            'foto'           => 'nullable|image|mimes:jpeg,png,jpg|max:2048',
        ], [
            // Detail Pesan Kustom menggunakan :attribute
            '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.',
            'max.file'   => 'Ukuran :attribute terlalu besar, maksimal adalah 2MB.',
        ], [
            // Alias Atribut agar pesan lebih ramah pengguna
            'nama'           => 'nama buket',
            'ukuran'         => 'ukuran buket',
            'kategori'       => 'kategori buket',
            'harga'          => 'harga',
            'request_khusus' => 'request khusus',
            'deskripsi'      => 'deskripsi produk',
            'foto'           => 'foto produk',
        ]);
        if ($validator->fails()) {
            return redirect()->back()
                ->withErrors($validator)
                ->withInput()
                ->with('error_id', $id);
        }

        $data = $request->only(['nama', 'ukuran', 'kategori', 'harga', 'request_khusus', 'deskripsi']);

        if ($request->hasFile('foto')) {
            if ($buket->foto) {
                Storage::disk('public')->delete($buket->foto);
            }

            $file = $request->file('foto');
            $filename = time() . '_' . $file->getClientOriginalName();
            $path = $file->storeAs('img/buket', $filename, 'public');

            $data['foto'] = $path;
        }

        $buket->update($data);

        return redirect()->back()->with('success', 'Produk buket berhasil diperbarui!');
    }

    public function destroy(string $id)
    {
        $buket = Buket::findOrFail($id);

        if ($buket->foto) {
            Storage::disk('public')->delete($buket->foto);
        }
        $buket->delete();

        return redirect()->back()->with('success', 'Produk dan foto berhasil dihapus permanen!');
    }
}
