<?php

class LaporanController {

    public function index() {
        $db = (new Database())->getConnection();
        $user = AuthHelper::user();

        if (in_array($user['role'], ['rt', 'rw', 'super_admin'])) {
            $stmt = $db->query("SELECT r.*, u.nama AS pelapor FROM reports r JOIN users u ON r.user_id = u.id ORDER BY r.id DESC");
        } else {
            $stmt = $db->prepare("SELECT r.*, u.nama AS pelapor FROM reports r JOIN users u ON r.user_id = u.id WHERE r.user_id = :uid ORDER BY r.id DESC");
            $stmt->execute([':uid' => $user['id']]);
        }

        $laporanList = $stmt->fetchAll(PDO::FETCH_ASSOC);

        require_once __DIR__ . '/../Views/laporan/index.php';
    }

    public function store() {
        if ($_SERVER['REQUEST_METHOD'] === 'POST') {
            $db = (new Database())->getConnection();
            $user = AuthHelper::user();

            $judul     = trim($_POST['judul'] ?? '');
            $deskripsi = trim($_POST['deskripsi'] ?? '');
            $latitude  = !empty($_POST['latitude']) ? $_POST['latitude'] : null;
            $longitude = !empty($_POST['longitude']) ? $_POST['longitude'] : null;
            $fotoName  = null;

            if (isset($_FILES['foto']) && $_FILES['foto']['error'] === UPLOAD_ERR_OK) {
                $uploadDir = __DIR__ . '/../../public/uploads/laporan/';
                if (!is_dir($uploadDir)) {
                    mkdir($uploadDir, 0755, true);
                }
                
                $ext = strtolower(pathinfo($_FILES['foto']['name'], PATHINFO_EXTENSION));
                $allowed = ['jpg', 'jpeg', 'png', 'webp', 'pdf'];

                if (in_array($ext, $allowed)) {
                    $fotoName = 'dokumen_' . time() . '_' . uniqid() . '.' . $ext;
                    move_uploaded_file($_FILES['foto']['tmp_name'], $uploadDir . $fotoName);
                }
            }

            $stmt = $db->prepare("INSERT INTO reports (user_id, judul, deskripsi, foto, latitude, longitude, status, created_at) 
                                  VALUES (:user_id, :judul, :deskripsi, :foto, :latitude, :longitude, 'pending', NOW())");
            
            $stmt->execute([
                ':user_id'   => $user['id'],
                ':judul'     => $judul,
                ':deskripsi' => $deskripsi,
                ':foto'      => $fotoName,
                ':latitude'  => $latitude,
                ':longitude' => $longitude
            ]);

            echo "<script>alert('Laporan berhasil dikirim!'); window.location.href='/laporan';</script>";
            exit();
        }
    }

    public function updateStatus() {
        if ($_SERVER['REQUEST_METHOD'] === 'POST') {
            $db = (new Database())->getConnection();
            $user = AuthHelper::user();

            if (!in_array($user['role'], ['rt', 'rw', 'super_admin'])) {
                echo "<script>alert('Akses ditolak!'); window.location.href='/laporan';</script>";
                exit();
            }

            $laporanId = $_POST['laporan_id'] ?? null;
            $status    = $_POST['status'] ?? 'pending';
            $tanggapan = trim($_POST['tanggapan'] ?? '');
            $tanggapanFoto = null;

            // Handle Upload Lampiran Balasan Pengurus (Gambar/PDF)
            if (isset($_FILES['tanggapan_foto']) && $_FILES['tanggapan_foto']['error'] === UPLOAD_ERR_OK) {
                $uploadDir = __DIR__ . '/../../public/uploads/laporan/';
                if (!is_dir($uploadDir)) {
                    mkdir($uploadDir, 0755, true);
                }

                $ext = strtolower(pathinfo($_FILES['tanggapan_foto']['name'], PATHINFO_EXTENSION));
                $allowed = ['jpg', 'jpeg', 'png', 'webp', 'pdf'];

                if (in_array($ext, $allowed)) {
                    $tanggapanFoto = 'balasan_' . time() . '_' . uniqid() . '.' . $ext;
                    move_uploaded_file($_FILES['tanggapan_foto']['tmp_name'], $uploadDir . $tanggapanFoto);
                }
            }

            if ($laporanId) {
                if ($tanggapanFoto) {
                    $stmt = $db->prepare("UPDATE reports SET status = :status, tanggapan = :tanggapan, tanggapan_foto = :tanggapan_foto WHERE id = :id");
                    $stmt->execute([
                        ':status'         => $status,
                        ':tanggapan'      => $tanggapan,
                        ':tanggapan_foto' => $tanggapanFoto,
                        ':id'             => $laporanId
                    ]);
                } else {
                    $stmt = $db->prepare("UPDATE reports SET status = :status, tanggapan = :tanggapan WHERE id = :id");
                    $stmt->execute([
                        ':status'    => $status,
                        ':tanggapan' => $tanggapan,
                        ':id'        => $laporanId
                    ]);
                }
            }

            header('Location: /laporan');
            exit();
        }
    }
}