<?php

namespace App\Http\Controllers\FrontendController;

use App\Http\Controllers\Controller;
use App\Models\Biaya;
use App\Models\Menu;
use App\Models\Setting;
use App\Models\TracerStudy;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Storage;

class TracerStudyController extends Controller
{
    public function index()
    {
        $mainMenus = Menu::where('submenu_id', 0)->orderBy('urutan', 'asc')->get();
        $subMenus = Menu::where('submenu_id', '!=', 0)->get();
        
        $settings = Setting::all()
            ->pluck('nilai_set', 'nama_set')
            ->mapWithKeys(fn($v, $k) => [strtolower($k) => $v])
            ->toArray();
        
        $biayas = Biaya::all()->groupBy('kategori');
        
        return view('Frontend.tracer-study', compact('mainMenus', 'subMenus', 'settings', 'biayas'));
    }
    
    public function store(Request $request)
    {
        $rules = [
            'nama' => 'required|string|max:255',
            'jenis_kelamin' => 'required|in:L,P',
            'alamat_domisili' => 'required|string',
            'jurusan' => 'required|string|max:255',
            'no_hp' => 'required|string|max:15',
            'email_pribadi' => 'required|email|max:255',
            'tanggal_kelulusan' => 'required|date',
            'memiliki_sertifikat' => 'required|in:Ya,Tidak',
            'nama_instansi' => 'required|string|max:255',
            'mulai_bekerja' => 'required|date',
            'waktu_menunggu' => 'required|string|max:100',
            'alamat_perusahaan' => 'required|string',
            'sosial_media' => 'nullable|string',
            'kesan' => 'nullable|string',
            'saran' => 'nullable|string',
        ];
        
        // Validasi sertifikat jika memiliki_sertifikat = Ya
        if ($request->memiliki_sertifikat == 'Ya') {
            $rules['sertifikat_nama.*'] = 'required|string|max:255';
            $rules['sertifikat_file.*'] = 'required|file|mimes:pdf,jpg,jpeg,png|max:2048';
        }
        
        $messages = [
            'nama.required' => 'Nama lengkap wajib diisi.',
            'jenis_kelamin.required' => 'Jenis kelamin wajib diisi.',
            'alamat_domisili.required' => 'Alamat domisili wajib diisi.',
            'jurusan.required' => 'Jurusan wajib diisi.',
            'no_hp.required' => 'Nomor HP wajib diisi.',
            'email_pribadi.required' => 'Email pribadi wajib diisi.',
            'email_pribadi.email' => 'Format email tidak valid.',
            'tanggal_kelulusan.required' => 'Tanggal kelulusan wajib diisi.',
            'memiliki_sertifikat.required' => 'Status sertifikat wajib diisi.',
            'nama_instansi.required' => 'Nama instansi/perusahaan wajib diisi.',
            'mulai_bekerja.required' => 'Tanggal mulai bekerja wajib diisi.',
            'waktu_menunggu.required' => 'Waktu menunggu mendapatkan pekerjaan wajib diisi.',
            'alamat_perusahaan.required' => 'Alamat perusahaan wajib diisi.',
            'sertifikat_nama.*.required' => 'Nama sertifikat wajib diisi.',
            'sertifikat_file.*.required' => 'File sertifikat wajib diunggah.',
            'sertifikat_file.*.mimes' => 'File sertifikat harus berformat PDF, JPG, JPEG, atau PNG.',
            'sertifikat_file.*.max' => 'Ukuran file sertifikat maksimal 2MB.',
        ];
        
        $request->validate($rules, $messages);
        
        $data = $request->only([
            'nama',
            'jenis_kelamin',
            'alamat_domisili',
            'jurusan',
            'no_hp',
            'email_pribadi',
            'tanggal_kelulusan',
            'memiliki_sertifikat',
            'nama_instansi',
            'mulai_bekerja',
            'waktu_menunggu',
            'alamat_perusahaan',
            'sosial_media',
            'kesan',
            'saran',
        ]);
        
        // Proses upload sertifikat
        if ($request->memiliki_sertifikat == 'Ya' && $request->has('sertifikat_nama')) {
            $sertifikatData = [];
            foreach ($request->sertifikat_nama as $key => $namaSertifikat) {
                if (isset($request->sertifikat_file[$key])) {
                    $file = $request->sertifikat_file[$key];
                    $filename = time() . '_' . uniqid() . '.' . $file->getClientOriginalExtension();
                    $path = $file->storeAs('sertifikat', $filename, 'public');
                    
                    $sertifikatData[] = [
                        'nama' => $namaSertifikat,
                        'file' => $path,
                    ];
                }
            }
            $data['sertifikat'] = json_encode($sertifikatData);
        }
        
        try {
            TracerStudy::create($data);
            return redirect()->route('tracer-study.success')->with('success', 'Terima kasih telah mengisi tracer study!');
        } catch (\Exception $e) {
            Log::error('Tracer Study gagal disimpan: ' . $e->getMessage());
            return redirect()->back()->withErrors(['error' => 'Gagal menyimpan data. Silakan coba lagi.'])->withInput();
        }
    }
    
    public function success()
    {
        $mainMenus = Menu::where('submenu_id', 0)->orderBy('urutan', 'asc')->get();
        $subMenus = Menu::where('submenu_id', '!=', 0)->get();
        
        $settings = Setting::all()
            ->pluck('nilai_set', 'nama_set')
            ->mapWithKeys(fn($v, $k) => [strtolower($k) => $v])
            ->toArray();
        
        return view('Frontend.tracer-success', compact('mainMenus', 'subMenus', 'settings'));
    }
}