<?php

namespace App\Http\Controllers\Petani;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Models\Produk;
use App\Models\ProdukImage;
use App\Models\Kategori; // PENTING: Import Model Kategori
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Storage;

class ProdukController extends Controller
{
    public function index()
    {
        $produks = Produk::with('kategori')
                    ->where('petani_id', Auth::guard('petani')->id())
                    ->latest()
                    ->get();
                    
        return view('petani.produk.index', compact('produks'));
    }

    public function create()
    {
        $kategoris = Kategori::all();
        
        return view('petani.produk.create', compact('kategoris'));
    }

    public function store(Request $request)
    {
        $request->validate([
            'nama_produk'     => 'required|string|max:255',
            'kategori_id'     => 'required|exists:kategoris,id', 
            'harga'           => 'required|numeric|min:0',
            'stok'            => 'required|integer|min:0',
            'deskripsi'       => 'required|string',
            'foto_produk'     => 'required|image|mimes:jpeg,png,jpg|max:2048',
            'foto_tambahan.*' => 'nullable|image|mimes:jpeg,png,jpg|max:2048'
        ]);

        // Simpan Foto Utama
        $fotoPath = null;
        if ($request->hasFile('foto_produk')) {
            $fotoPath = $request->file('foto_produk')->store('produk', 'public');
        }

        // Simpan Data Produk
        $produk = Produk::create([
            'petani_id'   => Auth::guard('petani')->id(),
            'kategori_id' => $request->kategori_id, 
            'nama_produk' => $request->nama_produk,
            'harga'       => $request->harga,
            'stok'        => $request->stok,
            'deskripsi'   => $request->deskripsi,
            'foto_produk' => $fotoPath,
        ]);

        // Simpan Foto Tambahan
        if ($request->hasFile('foto_tambahan')) {
            foreach ($request->file('foto_tambahan') as $file) {
                $path = $file->store('produk/gallery', 'public');
                ProdukImage::create([
                    'produk_id' => $produk->id,
                    'foto'      => $path
                ]);
            }
        }

        return redirect()->route('petani.produk.index')->with('success', 'Produk berhasil ditambahkan.');
    }

    public function edit($id)
    {
        $produk = Produk::with('images')->where('id', $id)->where('petani_id', Auth::guard('petani')->id())->firstOrFail();
        $kategoris = Kategori::all();

        return view('petani.produk.edit', compact('produk', 'kategoris'));
    }

    public function update(Request $request, $id)
    {
        $produk = Produk::with('images')->where('id', $id)->where('petani_id', Auth::guard('petani')->id())->firstOrFail();

        // Hitung slot gambar tersisa
        $jumlahGambarLama = $produk->images->count();
        $sisaSlot = max(3 - $jumlahGambarLama, 0);

        $request->validate([
            'nama_produk'     => 'required|string|max:255',
            'kategori_id'     => 'required|exists:kategoris,id',
            'harga'           => 'required|numeric|min:0',
            'stok'            => 'required|integer|min:0',
            'deskripsi'       => 'required|string',
            'foto_produk'     => 'nullable|image|mimes:jpeg,png,jpg|max:2048',
            'foto_tambahan'   => 'array|max:' . $sisaSlot,
            'foto_tambahan.*' => 'image|mimes:jpeg,png,jpg|max:2048'
        ], [
            'foto_tambahan.max' => "Anda hanya bisa menambah $sisaSlot foto lagi."
        ]);

        // Update Foto Utama
        if ($request->hasFile('foto_produk')) {
            if ($produk->foto_produk && Storage::disk('public')->exists($produk->foto_produk)) {
                Storage::disk('public')->delete($produk->foto_produk);
            }
            $produk->foto_produk = $request->file('foto_produk')->store('produk', 'public');
        }

        // Update Data
        $produk->update([
            'nama_produk' => $request->nama_produk,
            'kategori_id' => $request->kategori_id, 
            'harga'       => $request->harga,
            'stok'        => $request->stok,
            'deskripsi'   => $request->deskripsi,
            'foto_produk' => $produk->foto_produk 
        ]);
        
        // Tambah Foto Galeri
        if ($request->hasFile('foto_tambahan')) {
            foreach ($request->file('foto_tambahan') as $file) {
                if ($produk->images()->count() >= 3) break;
                
                $path = $file->store('produk/gallery', 'public');
                ProdukImage::create([
                    'produk_id' => $produk->id,
                    'foto'      => $path
                ]);
            }
        }

        return redirect()->route('petani.produk.index')->with('success', 'Produk berhasil diperbarui.');
    }

    public function destroy($id)
    {
        $produk = Produk::where('id', $id)->where('petani_id', Auth::guard('petani')->id())->firstOrFail();
        
        if ($produk->foto_produk && Storage::disk('public')->exists($produk->foto_produk)) {
            Storage::disk('public')->delete($produk->foto_produk);
        }

        foreach($produk->images as $img) {
            if (Storage::disk('public')->exists($img->foto)) {
                Storage::disk('public')->delete($img->foto);
            }
        }
        
        $produk->images()->delete(); 
        $produk->delete();

        return redirect()->route('petani.produk.index')->with('success', 'Produk berhasil dihapus.');
    }

    public function deleteImage($id)
    {
        $image = ProdukImage::findOrFail($id);
        
        if ($image->produk->petani_id != Auth::guard('petani')->id()) {
            abort(403);
        }

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

        $image->delete();

        return back()->with('success', 'Foto berhasil dihapus.');
    }
}