<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Models\PengajuanUkt;
use App\Models\Form;
use App\Models\RankingFile;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\DB;

class MahasiswaController extends Controller
{
    public function dashboard()
{
    try {
        $user = Auth::user();
        $today = now();

       // Get latest forms
            $formPenurunan = Form::where('jenis_form', 'penurunan')
                ->orderByDesc('tahun')
                ->orderByDesc('semester')
                ->first();

            $formPengangsuran = Form::where('jenis_form', 'pengangsuran')
                ->orderByDesc('tahun')
                ->orderByDesc('semester')
                ->first();

        // Get all pengajuan for this user
            $pengajuan = PengajuanUkt::with(['form', 'details' => function($query) {
                    $query->whereNotNull('rejection_reason');
                }])
                ->where('mahasiswa_id', $user->id)
                ->orderBy('created_at', 'desc')
                ->get();

        // Get latest ranking file
            $rankingFile = RankingFile::whereNotNull('path')->latest()->first();

         // Penurunan setup
            $penurunanSubmission = null;
            $submissionStatusPenurunan = null;
            $canSubmitPenurunan = true;
            $showAnnouncementPenurunan = false;
            $tanggal_pengumuman_penurunan = null;

            if ($formPenurunan) {
                $tanggal_pengumuman_penurunan = $formPenurunan->tanggal_pengumuman;
                $showAnnouncementPenurunan = $tanggal_pengumuman_penurunan && $today >= $tanggal_pengumuman_penurunan;

                $penurunanSubmission = $pengajuan->first(function($item) use ($formPenurunan) {
                    return $item->form &&
                        $item->form->jenis_form === 'penurunan' &&
                        $item->form->semester === $formPenurunan->semester &&
                        $item->form->tahun === $formPenurunan->tahun;
                });

                if ($penurunanSubmission) {
                    $submissionStatusPenurunan = $penurunanSubmission->status_validasi;
                    $canSubmitPenurunan = $submissionStatusPenurunan === 'tidak valid';
                }
            }

            // Pengangsuran setup
            $pengangsuranSubmission = null;
            $submissionStatusPengangsuran = null;
            $canSubmitPengangsuran = true;
            $showAnnouncementPengangsuran = false;
            $tanggal_pengumuman_pengangsuran = null;

            if ($formPengangsuran) {
                $tanggal_pengumuman_pengangsuran = $formPengangsuran->tanggal_pengumuman;
                $showAnnouncementPengangsuran = $tanggal_pengumuman_pengangsuran && $today >= $tanggal_pengumuman_pengangsuran;

                $pengangsuranSubmission = $pengajuan->first(function($item) use ($formPengangsuran) {
                    return $item->form &&
                        $item->form->jenis_form === 'pengangsuran' &&
                        $item->form->semester === $formPengangsuran->semester &&
                        $item->form->tahun === $formPengangsuran->tahun;
                });

                if ($pengangsuranSubmission) {
                    $submissionStatusPengangsuran = $pengangsuranSubmission->status_validasi;
                    $canSubmitPengangsuran = $submissionStatusPengangsuran === 'tidak valid';
                }
            }

            return view('mahasiswa.dashboard', [
                'user' => $user,
                'today' => $today,
                'pengajuan' => $pengajuan,
                'formPenurunan' => $formPenurunan,
                'formPengangsuran' => $formPengangsuran,
                'rankingFile' => $rankingFile,

                'submissionStatusPenurunan' => $submissionStatusPenurunan,
                'canSubmitPenurunan' => $canSubmitPenurunan,
                'showAnnouncementPenurunan' => $showAnnouncementPenurunan,

                'submissionStatusPengangsuran' => $submissionStatusPengangsuran,
                'canSubmitPengangsuran' => $canSubmitPengangsuran,
                'showAnnouncementPengangsuran' => $showAnnouncementPengangsuran,

                'tanggal_pengumuman' => max(
                    $tanggal_pengumuman_penurunan ?? now()->subCentury(),
                    $tanggal_pengumuman_pengangsuran ?? now()->subCentury()
                ),
                'showAnnouncement' => ($showAnnouncementPenurunan || $showAnnouncementPengangsuran),
            ]);
        } catch (\Exception $e) {
            \Log::error("Dashboard error: ".$e->getMessage());
            return response()->view('errors.simple', [
                'message' => 'Terjadi kesalahan saat memuat dashboard'
            ], 500);
        }
    }

    public function downloadRanking($id)
    {
        try {
            $rankingFile = RankingFile::findOrFail($id);
            $filePath = storage_path('app/public/' . $rankingFile->path);

            if (!file_exists($filePath)) {
                throw new \Exception("File laporan tidak ditemukan");
            }

            $filename = 'Laporan-UKT-' . $rankingFile->created_at->format('Y-m-d') . '.pdf';

            return response()->download($filePath, $filename, [
                'Content-Type' => 'application/pdf',
                'Content-Disposition' => 'attachment; filename="' . $filename . '"'
            ]);

        } catch (\Exception $e) {
            \Log::error("Download error - User: " . Auth::id() . " - Error: " . $e->getMessage());
            return redirect()->route('mahasiswa.dashboard')
                   ->with('error', 'Gagal mengunduh laporan: ' . $e->getMessage());
        }
    }
}
