<?php

namespace App\Http\Controllers\Instansi;

use App\Http\Controllers\Controller;
use App\Models\Lembur;
use App\Models\Karyawan;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;

class LemburController extends Controller
{
    public function index(Request $request)
    {
        $instansiId = Auth::user()->instansi_id;

        $status     = $request->input('status', '');
        $karyawanId = $request->input('karyawan_id');
        $bulan      = $request->input('bulan', now()->month);
        $tahun      = $request->input('tahun', now()->year);

        $query = Lembur::with(['karyawan.user', 'karyawan.jabatan', 'approver'])
            ->whereHas('karyawan', fn($q) => $q->where('instansi_id', $instansiId))
            ->whereMonth('tanggal', $bulan)
            ->whereYear('tanggal', $tahun)
            ->orderByRaw("FIELD(status, 'pending', 'disetujui', 'ditolak')")
            ->orderByDesc('tanggal');

        if ($status !== '') $query->where('status', $status);
        if ($karyawanId)    $query->where('karyawan_id', $karyawanId);

        $lemburList   = $query->paginate(15)->withQueryString();
        $karyawanList = Karyawan::with('user')->where('instansi_id', $instansiId)->get();

        $statPending   = Lembur::whereHas('karyawan', fn($q) => $q->where('instansi_id', $instansiId))->where('status', 'pending')->count();
        $statDisetujui = Lembur::whereHas('karyawan', fn($q) => $q->where('instansi_id', $instansiId))->where('status', 'disetujui')->whereMonth('tanggal', $bulan)->whereYear('tanggal', $tahun)->count();
        $totalJamDisetujui = Lembur::whereHas('karyawan', fn($q) => $q->where('instansi_id', $instansiId))->where('status', 'disetujui')->whereMonth('tanggal', $bulan)->whereYear('tanggal', $tahun)->sum('durasi_menit');

        return view('instansi.lembur.index', compact(
            'lemburList', 'karyawanList', 'status', 'karyawanId',
            'bulan', 'tahun', 'statPending', 'statDisetujui', 'totalJamDisetujui'
        ));
    }

    public function approve(Request $request, $id)
    {
        $instansiId = Auth::user()->instansi_id;
        $lembur = Lembur::whereHas('karyawan', fn($q) => $q->where('instansi_id', $instansiId))
                        ->findOrFail($id);

        $lembur->update([
            'status'         => 'disetujui',
            'disetujui_oleh' => Auth::id(),
            'catatan_admin'  => $request->input('catatan'),
        ]);

        if ($request->expectsJson()) {
            return response()->json(['success' => true, 'message' => 'Lembur disetujui.']);
        }
        return back()->with('success', 'Pengajuan lembur disetujui.');
    }

    public function reject(Request $request, $id)
    {
        $instansiId = Auth::user()->instansi_id;
        $lembur = Lembur::whereHas('karyawan', fn($q) => $q->where('instansi_id', $instansiId))
                        ->findOrFail($id);

        $lembur->update([
            'status'         => 'ditolak',
            'disetujui_oleh' => Auth::id(),
            'catatan_admin'  => $request->input('catatan'),
        ]);

        if ($request->expectsJson()) {
            return response()->json(['success' => true, 'message' => 'Lembur ditolak.']);
        }
        return back()->with('success', 'Pengajuan lembur ditolak.');
    }
}