<?php

namespace App\Http\Controllers;

use App\Models\TimelinePendaftaran;
use App\Models\Campus;
use Illuminate\Http\Request;

class TimelinePendaftaranController extends Controller
{
    /**
     * Helper untuk mendapatkan URL lengkap dari path penyimpanan.
     * @param string|null $path
     * @return string|null
     */
    private static function getFullImageUrl($path)
    {
        if ($path) {
            if (filter_var($path, FILTER_VALIDATE_URL)) {
                return $path;
            }
            // Menggunakan asset('storage/') lebih aman dan sesuai standar Laravel
            return asset('storage/' . $path); 
        }
        return null;
    }

    /**
     * Data Fallback Default jika data Timeline Pendaftaran belum dibuat atau tidak ditemukan.
     * @param string $slug
     * @return array
     */
    protected static function getDefaultFallbackData(string $slug = '')
    {
        // Sesuaikan fallback berdasarkan slug jika diperlukan
        return [
            'title' => 'Timeline Pendaftaran Kampus',
            'academicYear' => 'Tahun Ajaran Terbaru',
            'waves' => [],
            'events' => []
        ];
    }

    /**
     * Mengambil data Timeline Pendaftaran dari database berdasarkan slug kampus.
     * @param string $slug Slug kampus (e.g., 'akbid', 'umiba')
     * @return array
     */
    public static function getTimelineDataBySlug(string $slug): array
    {
        $normalizedSlug = strtolower($slug);

        // 1. Cari Campus ID berdasarkan Slug
        $campus = Campus::where('slug', $normalizedSlug)->first();

        // 2. Jika kampus tidak ditemukan, kembalikan fallback data
        if (!$campus) {
            return self::getDefaultFallbackData($slug);
        }

        // 3. Cari data Timeline Pendaftaran berdasarkan campus_id
        $timeline = TimelinePendaftaran::where('campus_id', $campus->id)->first();

        // 4. Jika data Timeline Pendaftaran ditemukan, format data tersebut
        if ($timeline) {
            // Mendapatkan waves (gelombang) yang terkait
            $waves = is_array($timeline->waves) ? $timeline->waves : json_decode($timeline->waves, true);

            // Format waves untuk mengubah format tanggal menjadi lebih mudah dipahami
            $formattedWaves = array_map(function ($wave) {
                return [
                    'name' => $wave['name'] ?? 'Tidak Diketahui',
                    'start_date' => isset($wave['start_date']) ? date('Y-m-d', strtotime($wave['start_date'])) : 'Tidak Diketahui',
                    'end_date' => isset($wave['end_date']) ? date('Y-m-d', strtotime($wave['end_date'])) : 'Tidak Diketahui',
                ];
            }, $waves);

            // Mendapatkan events (acara) yang terkait
            $events = is_array($timeline->events) ? $timeline->events : json_decode($timeline->events, true);

            // Format events untuk mengubah format tanggal menjadi lebih mudah dipahami
            $formattedEvents = array_map(function ($event) {
                return [
                    'name' => $event['name'] ?? 'Tidak Diketahui',
                    'date' => isset($event['date']) ? date('Y-m-d', strtotime($event['date'])) : 'Tidak Diketahui',
                ];
            }, $events);

            return [
                'title' => $timeline->title ?? 'Timeline Pendaftaran',
                'academicYear' => $timeline->academic_year ?? 'Tahun Ajaran Terbaru',
                'waves' => $formattedWaves,
                'events' => $formattedEvents
            ];
        }

        // 5. Jika kampus ditemukan, tapi data timeline pendaftaran belum dibuat, kembalikan fallback
        return self::getDefaultFallbackData($slug);
    }

}
