<?php

namespace App\Http\Controllers\Shared;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\File;

class ReferensiController extends Controller
{
    /**
     * Helper untuk memvalidasi hak akses peran Admin Provinsi khusus untuk mengunggah & menghapus.
     */
    private function validateAdminGuard()
    {
        $userId = session('simulasi_user_id', 1);
        $user = DB::table('users')->where('id', $userId)->first();
        
        if (!$user || $user->role !== 'provinsi_admin') {
            abort(403, 'Akses Ditolak! Hanya Admin Provinsi yang berwenang menambah atau menghapus berkas regulasi.');
        }
    }

    /**
     * Tampilkan halaman utama repositori folder juknis & regulasi dinas.
     */
    public function index()
    {
        // Deteksi Sandbox User Active Role
        $userId = session('simulasi_user_id', 1);
        $user = DB::table('users')->where('id', $userId)->first();
        $role = $user->role ?? 'provinsi_admin';

        // Ambil data dokumen regulasi dari database MySQL secara nyata
        $dokumens = DB::table('dokumen_regulasi')
            ->orderBy('tanggal_terbit', 'DESC')
            ->get();

        return view('shared.referensi.index', compact('dokumens', 'role'));
    }

    /**
     * Proses unggah berkas juknis/regulasi baru ke dalam database & server (Khusus Admin Provinsi).
     */
    public function store(Request $request)
    {
        $this->validateAdminGuard();

        $request->validate([
            'kategori' => 'required|in:juknis,uu,se',
            'judul' => 'required|string|max:255',
            'nomor' => 'required|string|max:150',
            'deskripsi' => 'nullable|string',
            'berkas_pdf' => 'required|file|mimes:pdf|max:10240', // Maksimal 10MB PDF
            'tanggal_terbit' => 'required|date'
        ], [
            'berkas_pdf.required' => 'Wajib memilih file PDF yang akan diunggah!',
            'berkas_pdf.mimes' => 'Format file dokumen wajib berupa berkas PDF!',
            'berkas_pdf.max' => 'Ukuran file PDF maksimal adalah 10 Megabytes!'
        ]);

        try {
            if ($request->hasFile('berkas_pdf')) {
                $file = $request->file('berkas_pdf');
                
                // Hitung ukuran file secara otomatis
                $bytes = $file->getSize();
                if ($bytes >= 1048576) {
                    $fileSize = number_format($bytes / 1048576, 2) . ' MB';
                } else {
                    $fileSize = number_format($bytes / 1024, 0) . ' KB';
                }

                // Tentukan nama file penyimpanan unik
                $filename = 'regulasi_' . time() . '_' . uniqid() . '.pdf';
                
                // Pindahkan file fisik ke folder public/uploads/regulasi/
                $file->move(public_path('uploads/regulasi/'), $filename);
                $savedPath = 'uploads/regulasi/' . $filename;

                // Simpan ke database
                DB::table('dokumen_regulasi')->insert([
                    'kategori' => $request->kategori,
                    'judul' => $request->judul,
                    'nomor' => $request->nomor,
                    'deskripsi' => $request->deskripsi,
                    'file_size' => $fileSize,
                    'file_path' => $savedPath,
                    'tanggal_terbit' => $request->tanggal_terbit,
                    'created_at' => now(),
                    'updated_at' => now()
                ]);

                return redirect()->route('shared.referensi.index')->with('success', 'Berkas juknis/regulasi dinas berhasil diunggah dan diterbitkan!');
            }
        } catch (\Exception $e) {
            return back()->withErrors(['error' => 'Gagal mengunggah berkas regulasi: ' . $e->getMessage()]);
        }
    }

    /**
     * Hapus berkas regulasi secara permanen dari server & database (Khusus Admin Provinsi).
     */
    public function destroy($id)
    {
        $this->validateAdminGuard();

        $dokumen = DB::table('dokumen_regulasi')->where('id', $id)->first();

        if (!$dokumen) {
            return back()->withErrors(['error' => 'Data dokumen tidak ditemukan di database.']);
        }

        try {
            // Hapus file fisik dari folder penyimpanan di server jika ada
            $fullPath = public_path($dokumen->file_path);
            if (File::exists($fullPath)) {
                File::delete($fullPath);
            }

            // Hapus baris data di database
            DB::table('dokumen_regulasi')->where('id', $id)->delete();

            return redirect()->route('shared.referensi.index')->with('success', 'Berkas juknis/regulasi berhasil dihapus secara permanen!');
        } catch (\Exception $e) {
            return back()->withErrors(['error' => 'Gagal menghapus berkas regulasi: ' . $e->getMessage()]);
        }
    }
}