<?php

namespace App\Http\Controllers;

use App\Services\SupabaseService;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Session;

class LoginController extends Controller
{
    public function __construct(private SupabaseService $supabase)
    {
    }

    public function showLoginForm()
    {
        return view('login');
    }

    public function handleLogin(Request $request)
    {
        $request->validate([
            'email' => 'required|email',
            'password' => 'required'
        ]);

        if (!$this->supabase->isConfigured()) {
            return back()->withErrors(['email' => 'Konfigurasi Supabase belum lengkap. Periksa file .env Anda.']);
        }

        try {
            // 1. Verifikasi kredensial ke Supabase Auth.
            $authUser = $this->supabase->signInWithPassword(
                $request->input('email'),
                $request->input('password')
            );

            if (!$authUser || empty($authUser['id'])) {
                return back()->withErrors(['email' => 'Email atau password yang Anda masukkan salah.']);
            }

            // 2. Ambil profil (public.users + instansi) berdasarkan auth_uid.
            $profile = $this->supabase->getUserWithInstansiByAuthUid($authUser['id']);

            // Detail instansi bisa berupa list rows dari embed PostgREST.
            $instansi = $profile['instansi'] ?? null;
            if (is_array($instansi) && array_is_list($instansi)) {
                $instansi = $instansi[0] ?? null;
            }

            // 3. App mantao hanya untuk akun jenis "instansi".
            if (!$profile || $instansi === null) {
                Session::flush();
                return back()->withErrors(['email' => 'Akun ini tidak terdaftar sebagai akun instansi pada aplikasi ini.']);
            }

            // 4. Simpan session dengan bentuk yang sama seperti sebelumnya
            //    (dipakai middleware, dashboard, dan header).
            Session::put('user', [
                'id' => $profile['id'] ?? null,
                'auth_uid' => $authUser['id'],
                'email' => $profile['email'] ?? ($authUser['email'] ?? $request->input('email')),
                'nama_instansi' => $instansi['nama_instansi'] ?? ($profile['name'] ?? ''),
                'role' => $instansi['level'] ?? 'user',
            ]);

            return redirect()->intended('/dashboard');
        } catch (\Throwable $e) {
            return back()->withErrors(['email' => 'Gagal terhubung ke Supabase. Periksa koneksi dan konfigurasi .env Anda.']);
        }
    }

    public function logout()
    {
        Session::flush();
        return redirect('/login');
    }
}
