<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\{Jurnal, SiswaMagang};
use Carbon\Carbon;
use RealRashid\SweetAlert\Facades\Alert;

class JurnalController extends Controller
{
    // Untuk Siswa
    public function indexSiswa(Request $request)
{
    $query = auth()->user()->jurnal();
    
    // Filter berdasarkan status
    if ($request->status) {
        $query->where('status_verifikasi', $request->status);
    }
    
    // Filter berdasarkan tanggal range (start_date & end_date)
    if ($request->start_date) {
        $query->whereDate('tanggal', '>=', $request->start_date);
    }
    
    if ($request->end_date) {
        $query->whereDate('tanggal', '<=', $request->end_date);
    }
    
    $jurnal = $query->orderBy('tanggal', 'desc')->paginate(3);
    return view('siswa.jurnal.index', compact('jurnal'));
}

    public function createSiswa()
    {
        return view('siswa.jurnal.create');
    }

public function storeSiswa(Request $request)
{
    $validated = $request->validate([
        'tanggal' => [
            'required',
            'date',
            'before_or_equal:today',
            'unique:jurnal,tanggal,NULL,id,user_id,' . auth()->id()
        ],
        'perencanaan_kegiatan' => 'required|string',
        'pelaksanaan_kegiatan' => 'required|string'
    ], [
        'tanggal.unique' => 'Jurnal untuk tanggal tersebut sudah ada',
        'tanggal.before_or_equal' => 'Tanggal tidak boleh melebihi hari ini'
    ]);

    Jurnal::create([
        'user_id' => auth()->id(),
        'tanggal' => $validated['tanggal'],
        'perencanaan_kegiatan' => $validated['perencanaan_kegiatan'],
        'pelaksanaan_kegiatan' => $validated['pelaksanaan_kegiatan']
    ]);

    Alert::success('Berhasil!', 'Jurnal berhasil disimpan');
    return redirect()->route('jurnal');
}

    public function editSiswa($id)
    {
        $jurnal = Jurnal::where('user_id', auth()->id())->findOrFail($id);
        return view('siswa.jurnal.edit', compact('jurnal'));
    }

public function updateSiswa(Request $request, $id)
{
    $jurnal = Jurnal::where('user_id', auth()->id())->findOrFail($id);
    
    $validated = $request->validate([
        'tanggal' => [
            'required',
            'date',
            'before_or_equal:today',
            'unique:jurnal,tanggal,' . $id . ',id,user_id,' . auth()->id()
        ],
        'perencanaan_kegiatan' => 'required|string',
        'pelaksanaan_kegiatan' => 'required|string'
    ], [
        'tanggal.before_or_equal' => 'Tanggal tidak boleh melebihi hari ini'
    ]);

    $jurnal->update([
        'tanggal' => $validated['tanggal'],
        'perencanaan_kegiatan' => $validated['perencanaan_kegiatan'],
        'pelaksanaan_kegiatan' => $validated['pelaksanaan_kegiatan'],
        'status_verifikasi' => 'pending', // Reset status
        'catatan_instruktur' => null
    ]);

    Alert::success('Berhasil!', 'Jurnal berhasil diperbarui. Status kembali pending.');
    return redirect()->route('jurnal');
}

    public function destroySiswa($id)
    {
        $jurnal = Jurnal::where('user_id', auth()->id())->findOrFail($id);
        $jurnal->delete();
        Alert::success('Berhasil!', 'Jurnal berhasil dihapus');
        return back();
    }
    
    public function detailSiswa($id)
{
    $jurnal = Jurnal::where('user_id', auth()->id())->findOrFail($id);
    return view('siswa.jurnal.detail', compact('jurnal'));
}

    // Untuk Pembimbing Magang
    public function indexPembimbingMagang(Request $request)
{
    $pembimbing = auth()->user()->pembimbingMagang;
    
    // Check if pembimbing exists
    if (!$pembimbing) {
        return redirect()->back()->with('error', 'Data pembimbing tidak ditemukan');
    }
    
    $siswaIds = $pembimbing->siswaList->pluck('id')->toArray();
    $userIds = \App\Models\User::whereIn('id_siswa', $siswaIds)->pluck('id')->toArray();
    
    $query = Jurnal::with('user.siswa')->whereIn('user_id', $userIds);
    
    // Filter berdasarkan status
    if ($request->status) {
        $query->where('status_verifikasi', $request->status);
    }
    
    // Filter berdasarkan nama siswa
    if ($request->nama_siswa) {
        $query->whereHas('user.siswa', function($q) use ($request) {
            $q->where('nama_siswa', 'like', '%' . $request->nama_siswa . '%');
        });
    }
    
    // Filter berdasarkan tanggal range
    if ($request->tanggal_dari) {
        $query->whereDate('tanggal', '>=', $request->tanggal_dari);
    }
    
    if ($request->tanggal_sampai) {
        $query->whereDate('tanggal', '<=', $request->tanggal_sampai);
    }
    
    $jurnal = $query->orderBy('tanggal', 'desc')->paginate(3);
                   
    return view('pembimbing-magang.jurnal.index', compact('jurnal'));
}

    public function showPembimbingMagang($id)
    {
        $jurnal = Jurnal::with('user.siswa')->findOrFail($id);
        return view('pembimbing-magang.jurnal.show', compact('jurnal'));
    }

    public function verifikasiJurnal(Request $request, $id)
    {
        $jurnal = Jurnal::findOrFail($id);
        
        $validated = $request->validate([
            'status_verifikasi' => 'required|in:diterima,ditolak',
            'catatan_instruktur' => 'nullable|string'
        ]);

        if ($validated['status_verifikasi'] == 'ditolak' && empty($validated['catatan_instruktur'])) {
            Alert::error('Error!', 'Catatan wajib diisi jika jurnal ditolak');
            return back();
        }

        $jurnal->update($validated);
        Alert::success('Berhasil!', 'Status jurnal berhasil diperbarui');
        return back();
    }

    // Untuk Pembimbing Sekolah
    public function indexPembimbingSekolah(Request $request)
    {
        $pembimbing = auth()->user()->pembimbingSekolah;
        $siswaIds = $pembimbing->siswaList->pluck('id')->toArray();
        $userIds = \App\Models\User::whereIn('id_siswa', $siswaIds)->pluck('id')->toArray();
        
        $query = Jurnal::with('user.siswa')->whereIn('user_id', $userIds);
        
        // Filter berdasarkan status
        if ($request->status) {
            $query->where('status_verifikasi', $request->status);
        }
        
        // Filter berdasarkan nama siswa
        if ($request->nama_siswa) {
            $query->whereHas('user.siswa', function($q) use ($request) {
                $q->where('nama_siswa', 'like', '%' . $request->nama_siswa . '%');
            });
        }
        
        // Filter berdasarkan tanggal range
        if ($request->tanggal_dari) {
            $query->whereDate('tanggal', '>=', $request->tanggal_dari);
        }
        
        if ($request->tanggal_sampai) {
            $query->whereDate('tanggal', '<=', $request->tanggal_sampai);
        }
        
        $jurnal = $query->orderBy('tanggal', 'desc')->paginate(3);
                       
        return view('pembimbing-sekolah.jurnal.index', compact('jurnal'));
    }

    public function showPembimbingSekolah($id)
    {
        $jurnal = Jurnal::with('user.siswa')->findOrFail($id);
        return view('pembimbing-sekolah.jurnal.show', compact('jurnal'));
    }
}