<?php

namespace App\Http\Controllers\Shared;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;

class NotifikasiController extends Controller
{
    /**
     * Tampilkan daftar notifikasi in-app untuk pengguna Sandbox yang aktif.
     */
    public function index()
    {
        // SINKRONISASI BARU: Membaca User ID Simulated Sandbox yang sedang aktif
        $userId = session('simulasi_user_id', 1);

        // Ambil notifikasi milik user tersebut atau yang ditujukan untuk umum (NULL)
        $notifikasis = DB::table('notifikasi')
            ->where(function($query) use ($userId) {
                $query->where('user_id', $userId)
                      ->orWhereNull('user_id');
            })
            ->orderBy('created_at', 'DESC')
            ->get();

        return view('shared.notifikasi', compact('notifikasis', 'userId'));
    }

    /**
     * Tandai satu notifikasi sebagai sudah dibaca.
     */
    public function markAsRead($id)
    {
        DB::table('notifikasi')
            ->where('id', $id)
            ->update([
                'is_read' => true,
                'updated_at' => now()
            ]);

        return redirect()->back()->with('success', 'Notifikasi berhasil ditandai sebagai dibaca.');
    }

    /**
     * Tandai semua notifikasi milik simulated user aktif sebagai sudah dibaca sekaligus.
     */
    public function markAllAsRead()
    {
        // SINKRONISASI BARU: Membaca User ID Simulated Sandbox yang aktif
        $userId = session('simulasi_user_id', 1);

        DB::table('notifikasi')
            ->where(function($query) use ($userId) {
                $query->where('user_id', $userId)
                      ->orWhereNull('user_id');
            })
            ->update([
                'is_read' => true,
                'updated_at' => now()
            ]);

        return redirect()->back()->with('success', 'Semua notifikasi masuk berhasil ditandai sebagai dibaca.');
    }

    /**
     * Fungsi helper otomatis untuk membuat notifikasi baru (In-app notification generator).
     * Fungsi ini dipanggil dari controller usulan saat ada penolakan/persetujuan.
     */
    public static function kirim($userId, $judul, $pesan, $tipe = 'info', $tautan = null)
    {
        DB::table('notifikasi')->insert([
            'user_id' => $userId,
            'judul' => $judul,
            'pesan' => $pesan,
            'tipe' => $tipe,
            'tautan' => $tautan,
            'is_read' => false,
            'created_at' => now(),
            'updated_at' => now()
        ]);
    }
}