<?php

namespace App\Http\Controllers\Karyawan;

use App\Http\Controllers\Controller;
use App\Models\Cuti;
use App\Models\JatahCuti;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Storage;
use Carbon\Carbon;

class CutiController extends Controller
{
    public function index()
    {
        $karyawan = Auth::user()->karyawan;
        $cutis    = Cuti::where('karyawan_id', $karyawan->id)
                    ->orderByDesc('created_at')->get();
        $jatah    = JatahCuti::getOrCreate($karyawan->id);

        return view('karyawan.cuti.index', compact('cutis', 'jatah'));
    }

    public function create()
    {
        $karyawan = Auth::user()->karyawan;
        $jatah    = JatahCuti::getOrCreate($karyawan->id);
        $jenisOptions = Cuti::jenisLabel();

        return view('karyawan.cuti.create', compact('jatah', 'jenisOptions'));
    }

    public function store(Request $request)
    {
        $request->validate([
            'jenis'          => 'required|in:tahunan,besar,melahirkan,penting,lainnya',
            'tanggal_mulai'  => 'required|date|after_or_equal:today',
            'tanggal_selesai'=> 'required|date|after_or_equal:tanggal_mulai',
            'keterangan'     => 'nullable|string|max:500',
            'bukti_file'     => 'nullable|file|mimes:jpg,jpeg,png,pdf|max:2048',
        ]);

        $karyawan = Auth::user()->karyawan;
        $mulai    = Carbon::parse($request->tanggal_mulai);
        $selesai  = Carbon::parse($request->tanggal_selesai);
        $durasi   = $mulai->diffInDays($selesai) + 1;

        // Cek sisa jatah untuk cuti tahunan
        if ($request->jenis === 'tahunan') {
            $jatah = JatahCuti::getOrCreate($karyawan->id);
            if ($durasi > $jatah->sisa_hari) {
                return back()->withErrors(['tanggal_selesai' => "Sisa jatah cuti kamu hanya {$jatah->sisa_hari} hari, tidak cukup untuk {$durasi} hari."])->withInput();
            }
        }

        // Simpan bukti
        $path = null;
        if ($request->hasFile('bukti_file')) {
            $path = $request->file('bukti_file')->store('cuti-bukti', 'public');
        }

        Cuti::create([
            'karyawan_id'    => $karyawan->id,
            'jenis'          => $request->jenis,
            'tanggal_mulai'  => $request->tanggal_mulai,
            'tanggal_selesai'=> $request->tanggal_selesai,
            'durasi_hari'    => $durasi,
            'keterangan'     => $request->keterangan,
            'bukti_file'     => $path,
            'status'         => 'pending',
        ]);

        return redirect()->route('karyawan.cuti.index')
            ->with('success', 'Pengajuan cuti berhasil dikirim dan menunggu persetujuan.');
    }

    public function show($id)
    {
        $karyawan = Auth::user()->karyawan;
        $cuti     = Cuti::where('karyawan_id', $karyawan->id)->findOrFail($id);

        return view('karyawan.cuti.show', compact('cuti'));
    }
}