<?php

namespace App\Http\Controllers\Admin;

use App\Http\Controllers\Controller;
use App\Models\Setting;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Facades\Hash;

class SettingController extends Controller
{
    public function index()
    {
        $settings = Setting::all()->groupBy('group');
        return view('admin.settings.index', compact('settings'));
    }

    public function update(Request $request)
    {
        $settingsData = [
            // General
            'site_name' => ['group' => 'general', 'label' => 'Nama Situs'],
            'site_description' => ['group' => 'general', 'label' => 'Deskripsi Situs'],
            'countdown_seconds' => ['group' => 'general', 'label' => 'Durasi Countdown (detik)'],
            'facebook_pixel_id' => ['group' => 'general', 'label' => 'Facebook Pixel ID'],

            // SMTP
            'mail_host' => ['group' => 'smtp', 'label' => 'SMTP Host'],
            'mail_port' => ['group' => 'smtp', 'label' => 'SMTP Port'],
            'mail_username' => ['group' => 'smtp', 'label' => 'SMTP Username'],
            'mail_password' => ['group' => 'smtp', 'label' => 'SMTP Password'],
            'mail_encryption' => ['group' => 'smtp', 'label' => 'SMTP Encryption'],
            'mail_from_address' => ['group' => 'smtp', 'label' => 'From Email'],
            'mail_from_name' => ['group' => 'smtp', 'label' => 'From Name'],

            // WhatsApp Fonnte
            'fonnte_api_key' => ['group' => 'whatsapp', 'label' => 'Fonnte API Key'],
            'admin_whatsapp' => ['group' => 'whatsapp', 'label' => 'Nomor WhatsApp Admin'],

            // Notification scheduling
            'stage_advance_days' => ['group' => 'notification', 'label' => 'Interval Antar Tahap (hari)'],
            'final_auto_decision' => ['group' => 'notification', 'label' => 'Keputusan Akhir Otomatis'],
            'wa_send_delay_seconds' => ['group' => 'notification', 'label' => 'Delay Antar Kirim WA (detik)'],
            'notification_send_delay_seconds' => ['group' => 'notification', 'label' => 'Delay Antar Kirim Notifikasi (detik)'],
            'auto_advance' => ['group' => 'notification', 'label' => 'Otomatis Loloskan (1=Ya, 0=Tidak)'],
        ];

        foreach ($settingsData as $key => $meta) {
            if ($key === 'auto_advance') {
                // Checkbox: send 0 if unchecked (not present in request)
                Setting::set($key, $request->has($key) ? '1' : '0', $meta['group'], $meta['label']);
            } elseif ($request->has($key)) {
                Setting::set($key, $request->input($key), $meta['group'], $meta['label']);
            }
        }

        // Clear cached settings so changes take effect immediately
        Cache::forget('app_settings');

        return back()->with('success', 'Pengaturan berhasil disimpan.');
    }

    public function changePassword(Request $request)
    {
        $request->validate([
            'current_password' => 'required',
            'new_password' => 'required|min:8|confirmed',
        ], [
            'current_password.required' => 'Password lama wajib diisi.',
            'new_password.required' => 'Password baru wajib diisi.',
            'new_password.min' => 'Password baru minimal 8 karakter.',
            'new_password.confirmed' => 'Konfirmasi password tidak cocok.',
        ]);

        $user = Auth::user();

        if (!Hash::check($request->current_password, $user->password)) {
            return back()->withErrors(['current_password' => 'Password lama tidak sesuai.'])->withInput();
        }

        $user->password = $request->new_password;
        $user->save();

        // Logout admin after password change for security
        Auth::logout();
        $request->session()->invalidate();
        $request->session()->regenerateToken();

        return redirect()->route('admin.login')->with('success', 'Password berhasil diubah. Silakan login kembali.');
    }

}
