<?php

namespace App\Http\Controllers\Admin;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Models\Tema;
use App\Models\Periode;
use Carbon\Carbon;

class TemaController extends Controller
{
    public function index(Request $request)
    {
        $periodeList = Periode::orderBy('tanggal_mulai', 'desc')->get();

        $tahunList = $periodeList->map(function ($p) {
            return Carbon::parse($p->tanggal_mulai)->format('Y');
        })->unique()->sortDesc()->values();

        $tahunDipilih = $request->tahun;

        // ASC = data lama di atas, tema baru muncul di bawah
        $query = Tema::with('periode')->orderBy('id', 'asc');

        if (!empty($tahunDipilih)) {
            $query->whereHas('periode', function ($q) use ($tahunDipilih) {
                $q->whereYear('tanggal_mulai', $tahunDipilih);
            });
        }

        $tema = $query->get();

        return view('admin.tema', compact(
            'tema',
            'periodeList',
            'tahunList',
            'tahunDipilih'
        ));
    }

    public function store(Request $request)
    {
        $validated = $request->validate([
            'nama' => 'required|string|max:100',
        ]);

        Tema::create([
            'nama' => $validated['nama'],
            'periode_id' => null,
            'status_tema' => 0,
        ]);

        return redirect()
            ->route('admin.tema.index')
            ->with('success', 'Tema berhasil ditambahkan.');
    }

    public function update(Request $request, $id)
    {
        $validated = $request->validate([
            'nama' => 'required|string|max:100',
        ]);

        $tema = Tema::findOrFail($id);

        $tema->update([
            'nama' => $validated['nama'],
        ]);

        return redirect()
            ->route('admin.tema.index')
            ->with('success', 'Tema berhasil diperbarui.');
    }

    public function destroy($id)
    {
        $tema = Tema::findOrFail($id);
        $tema->delete();

        return redirect()
            ->route('admin.tema.index')
            ->with('success', 'Tema berhasil dihapus.');
    }

    public function toggle($id)
    {
        $tema = Tema::findOrFail($id);

        $tema->status_tema = !$tema->status_tema;
        $tema->save();

        return redirect()
            ->route('admin.tema.index')
            ->with('success', 'Status tema berhasil diubah.');
    }
}