<?php

namespace App\Livewire;

use Livewire\Component;
use App\Models\Climbing;
use Livewire\Attributes\On;
use Carbon\Carbon;

class ClimbingTable extends Component
{
    // Properti untuk menangkap filter tanggal dari halaman Admin
    public $fromDate;
    public $toDate;

    // Fungsi mount untuk menerima lemparan data dari AdminController/Blade
    public function mount($fromDate = null, $toDate = null)
    {
        $this->fromDate = $fromDate;
        $this->toDate = $toDate;
    }

    // Ini adalah 'telinga' komponen ini. 
    // Saat JS mengirim sinyal 'refresh-data', fungsi ini akan memicu render ulang.
    #[On('refresh-data')]
    public function refreshTable()
    {
        // Kosongkan saja, fungsinya hanya untuk mentrigger refresh
    }

    public function render()
    {
        // Menarik data Climbing beserta relasi tiket, guide lewat grup, dan guide individu
        $query = Climbing::with(['ticket', 'group.guide', 'guide']);

        // LOGIKA FILTER TANGGAL:
        if ($this->fromDate && $this->toDate) {
            // Jika Admin sedang mencari rentang tanggal tertentu
            $query->whereBetween('created_at', [
                Carbon::parse($this->fromDate)->startOfDay(),
                Carbon::parse($this->toDate)->endOfDay()
            ]);
        } else {
            // Default: Tampilkan data pendaftaran HARI INI
            // TIPS: Jika sedang testing, pastikan data yang diinput memang tanggal hari ini!
            $query->whereDate('created_at', Carbon::today());
        }

        $climbings = $query->orderByRaw('check_out_date IS NULL DESC') // Prioritas: Pendaki yang belum turun
            ->orderBy('created_at', 'desc')           // Urutan: Pendaftaran terbaru
            ->get();

        return view('livewire.climbing-table', [
            'climbings' => $climbings
        ]);
    }
}