<?php

namespace App\Http\Controllers;

use App\Models\InformasiKegiatan;
use App\Models\Kabupaten;
use App\Models\Kecamatan;
use App\Models\Kelurahan;
use Illuminate\Http\Request;
use Carbon\Carbon;

class LayananController extends Controller
{
    /**
     * Get layanan data for homepage
     */
    public function getLayananData()
    {
        // Header data
        $header = [
            'title' => 'Layanan Perizinan Lingkungan',
            'subtitle' => 'Informasi terkini mengenai berbagai layanan perizinan dan penilaian dampak lingkungan'
        ];

        // Tabs data
        $tabs = [
            ['id' => 'amdal', 'label' => 'AMDAL'],
            ['id' => 'uklupl', 'label' => 'UKL-UPL'],
            ['id' => 'addendum', 'label' => 'Addendum'],
            ['id' => 'audit', 'label' => 'AUDIT']
        ];

        // Contents data from database
        $contents = [
            'amdal' => $this->getKegiatanByJenis('AMDAL'),
            'uklupl' => $this->getKegiatanByJenis('UKL-UPL'),
            'addendum' => $this->getKegiatanByJenis('Addendum'),
            'audit' => $this->getKegiatanByJenis('AUDIT', true) // Special format for audit
        ];

        return response()->json([
            'header' => $header,
            'tabs' => $tabs,
            'contents' => $contents
        ]);
    }

    /**
     * Get kegiatan data by document type
     */
    private function getKegiatanByJenis($jenis, $isAudit = false)
    {
        $kegiatan = InformasiKegiatan::where('JenisDokumen', $jenis)
            ->where('Status', 'aktif')
            ->whereDate('TanggalSelesaiPeriode', '>=', Carbon::now())
            ->orderBy('TanggalMulaiPeriode', 'desc')
            ->take(10)
            ->get();

        if ($isAudit) {
            // Format untuk audit table
            return $kegiatan->map(function ($item, $index) {
                return [
                    'no' => $index + 1,
                    'company' => $item->Pemrakarsa,
                    'title' => $item->NamaKegiatan,
                    'description' => $item->DeskripsiKegiatan,
                    'link' => route('layanan.detail', $item->KegiatanID)
                ];
            })->toArray();
        } else {
            // Format untuk standard items
            return $kegiatan->map(function ($item) {
                return [
                    'id' => $item->KegiatanID,
                    'title' => $item->NamaKegiatan,
                    'description' => $item->DeskripsiKegiatan,
                    'periode' => $this->formatPeriode($item->TanggalMulaiPeriode, $item->TanggalSelesaiPeriode),
                    'link' => route('layanan.detail', $item->KegiatanID),
                    'status' => $item->Status,
                    'pemrakarsa' => $item->Pemrakarsa,
                    'jenis_dokumen' => $item->JenisDokumen,
                    'no_registrasi' => $item->NoRegistrasi
                ];
            })->toArray();
        }
    }

    /**
     * Format periode display
     */
    private function formatPeriode($tanggalMulai, $tanggalSelesai)
    {
        $mulai = Carbon::parse($tanggalMulai);
        $selesai = Carbon::parse($tanggalSelesai);

        return $mulai->format('d M') . ' - ' . $selesai->format('d M Y');
    }

    /**
     * Get detail kegiatan for feedback form
     */
    public function getDetailKegiatan($id)
    {
        $kegiatan = InformasiKegiatan::findOrFail($id);

        return response()->json([
            'id' => $kegiatan->KegiatanID,
            'no_registrasi' => $kegiatan->NoRegistrasi,
            'jenis_dokumen' => $kegiatan->JenisDokumen,
            'nama_kegiatan' => $kegiatan->NamaKegiatan,
            'bidang_usaha' => $kegiatan->BidangUsaha,
            'skala_besaran' => $kegiatan->SkalaBesaran,
            'lokasi_kegiatan' => $kegiatan->LokasiKegiatan,
            'kewenangan' => $kegiatan->Kewenangan,
            'pemrakarsa' => $kegiatan->Pemrakarsa,
            'provinsi_kota' => $kegiatan->ProvinsiKota,
            'deskripsi_kegiatan' => $kegiatan->DeskripsiKegiatan,
            'dampak_potensial' => $kegiatan->DampakPotensial,
            'deskripsi_lokasi' => $kegiatan->DeskripsiLokasi,
            'latitude' => $kegiatan->Latitude,
            'longitude' => $kegiatan->Longitude,
            'periode' => $this->formatPeriode($kegiatan->TanggalMulaiPeriode, $kegiatan->TanggalSelesaiPeriode)
        ]);
    }

    /**
     * Get wilayah data (Kabupaten, Kecamatan, Kelurahan)
     */
    public function getWilayahData()
    {
        $kabupaten = Kabupaten::orderBy('NamaKabupaten')->get();
        $kecamatan = Kecamatan::orderBy('NamaKecamatan')->get();
        $kelurahan = Kelurahan::orderBy('NamaKelurahan')->get();

        return response()->json([
            'kabkota' => $kabupaten->map(function($item) {
                return [
                    'value' => $item->KabupatenId,
                    'label' => $item->NamaKabupaten
                ];
            }),
            'kecamatan' => $kecamatan->map(function($item) {
                return [
                    'value' => $item->KecamatanId,
                    'label' => $item->NamaKecamatan,
                    'kabupaten_id' => $item->KabupatenId
                ];
            }),
            'kelurahan' => $kelurahan->map(function($item) {
                return [
                    'value' => $item->KelurahanId,
                    'label' => $item->NamaKelurahan,
                    'kecamatan_id' => $item->KecamatanId
                ];
            })
        ]);
    }

    /**
     * Get filtered kegiatan data
     */
    public function getFilteredKegiatan(Request $request)
    {
        $query = InformasiKegiatan::where('Status', 'aktif')
            ->whereDate('TanggalSelesaiPeriode', '>=', Carbon::now());

        // Filter by search term
        if ($request->search) {
            $query->where(function($q) use ($request) {
                $q->where('NamaKegiatan', 'ILIKE', '%' . $request->search . '%')
                  ->orWhere('DeskripsiKegiatan', 'ILIKE', '%' . $request->search . '%')
                  ->orWhere('Pemrakarsa', 'ILIKE', '%' . $request->search . '%');
            });
        }

        // Filter by document type
        if ($request->jenis_dokumen) {
            $allowedTypes = ['AMDAL', 'UKL-UPL', 'Addendum', 'AUDIT'];
            if (in_array($request->jenis_dokumen, $allowedTypes)) {
                $query->where('JenisDokumen', $request->jenis_dokumen);
            }
        }

        // Filter by location (you can extend this based on your needs)
        if ($request->kabkota) {
            $query->where('ProvinsiKota', 'ILIKE', '%' . $request->kabkota . '%');
        }

        $kegiatan = $query->orderBy('TanggalMulaiPeriode', 'desc')->get();

        // Group by document type
        $groupedKegiatan = $kegiatan->groupBy('JenisDokumen');

        $contents = [];
        foreach ($groupedKegiatan as $jenis => $items) {
            $key = strtolower($jenis);
            if ($jenis === 'AUDIT') {
                $contents[$key] = $items->map(function ($item, $index) {
                    return [
                        'no' => $index + 1,
                        'company' => $item->Pemrakarsa,
                        'title' => $item->NamaKegiatan,
                        'description' => $item->DeskripsiKegiatan,
                        'link' => route('layanan.detail', $item->KegiatanID)
                    ];
                })->toArray();
            } else {
                $contents[$key] = $items->map(function ($item) {
                    return [
                        'id' => $item->KegiatanID,
                        'title' => $item->NamaKegiatan,
                        'description' => $item->DeskripsiKegiatan,
                        'periode' => $this->formatPeriode($item->TanggalMulaiPeriode, $item->TanggalSelesaiPeriode),
                        'link' => route('layanan.detail', $item->KegiatanID),
                        'status' => $item->Status,
                        'pemrakarsa' => $item->Pemrakarsa,
                        'jenis_dokumen' => $item->JenisDokumen,
                        'no_registrasi' => $item->NoRegistrasi
                    ];
                })->toArray();
            }
        }

        return response()->json($contents);
    }
}
