<?php

namespace App\Http\Controllers;

use App\SiteSetting;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Hash;

class SettingsController extends Controller
{
    public function __construct()
    {
        $this->middleware('auth');
        $this->middleware('admin');
    }

    public function index()
    {
        $user = Auth::user();
        $siteSettings = SiteSetting::getAll();
        return view('admin.settings', compact('user', 'siteSettings'));
    }

    public function updateProfile(Request $request)
    {
        $request->validate([
            'name' => 'required|max:255',
            'email' => 'required|email|max:255',
        ]);

        $user = Auth::user();
        $user->name = $request->name;
        $user->email = $request->email;
        $user->save();

        flash('تم تحديث بيانات الحساب بنجاح')->success();
        return redirect('/admin/settings');
    }

    public function updatePassword(Request $request)
    {
        $request->validate([
            'current_password' => 'required',
            'new_password' => 'required|min:6|confirmed',
        ]);

        $user = Auth::user();

        if (!Hash::check($request->current_password, $user->password)) {
            flash('كلمة المرور الحالية غير صحيحة')->error();
            return redirect('/admin/settings');
        }

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

        flash('تم تغيير كلمة المرور بنجاح')->success();
        return redirect('/admin/settings');
    }

    public function updateSite(Request $request)
    {
        SiteSetting::set('site_name', $request->site_name ?? '');
        SiteSetting::set('site_logo_text', $request->site_logo_text ?? '');

        flash('تم تحديث إعدادات الموقع بنجاح')->success();
        return redirect('/admin/settings');
    }

    public function updateWelcome(Request $request)
    {
        $request->validate([
            'welcome_title' => 'required|max:500',
            'welcome_subtitle' => 'required|max:500',
            'welcome_description' => 'required|max:2000',
        ]);

        SiteSetting::set('welcome_title', $request->welcome_title);
        SiteSetting::set('welcome_subtitle', $request->welcome_subtitle);
        SiteSetting::set('welcome_description', $request->welcome_description);

        flash('تم تحديث نص الترحيب بنجاح')->success();
        return redirect('/admin/settings');
    }

    public function updateCopyright(Request $request)
    {
        SiteSetting::set('copyright_text', $request->copyright_text ?? '');
        $startYear = (int) ($request->copyright_start_year ?? '2000');
        if ($startYear < 1900 || $startYear > 2100) {
            $startYear = 2000;
        }
        SiteSetting::set('copyright_start_year', (string) $startYear);

        flash('تم تحديث حقوق النشر بنجاح')->success();
        return redirect('/admin/settings');
    }

    public function updateLogoIcon(Request $request)
    {
        $data = $request->input('logo_icon_data');
        if ($data && preg_match('/^data:image\/(png|jpeg|jpg|svg\+xml|x-icon|vnd\.microsoft\.icon);base64,(.+)$/', $data, $matches)) {
            $imageData = base64_decode($matches[2]);
            if ($imageData !== false) {
                file_put_contents(public_path('logo-icon.png'), $imageData);
                SiteSetting::set('logo_icon', '/logo-icon.png?v=' . time());
                flash('تم تحديث أيقونة الشعار بنجاح')->success();
            } else {
                flash('فشل في معالجة الملف')->error();
            }
        } else {
            flash('يرجى اختيار ملف صورة صالح')->error();
        }

        return redirect('/admin/settings');
    }

    public function updateFavicon(Request $request)
    {
        $data = $request->input('favicon_data');
        if ($data && preg_match('/^data:image\/(png|jpeg|jpg|svg\+xml|x-icon|vnd\.microsoft\.icon);base64,(.+)$/', $data, $matches)) {
            $imageData = base64_decode($matches[2]);
            if ($imageData !== false) {
                file_put_contents(public_path('favicon.png'), $imageData);
                SiteSetting::set('favicon', '/favicon.png?v=' . time());
                flash('تم تحديث أيقونة الموقع بنجاح')->success();
            } else {
                flash('فشل في معالجة الملف')->error();
            }
        } else {
            flash('يرجى اختيار ملف صورة صالح')->error();
        }

        return redirect('/admin/settings');
    }

    public function updateRegistration(Request $request)
    {
        SiteSetting::set('registration_enabled', $request->registration_enabled ? '1' : '0');

        $status = $request->registration_enabled ? 'مفعّل' : 'معطّل';
        flash("تم تحديث إعدادات التسجيل - التسجيل الآن: {$status}")->success();
        return redirect('/admin/settings');
    }

    public function updateSubmitLyrics(Request $request)
    {
        SiteSetting::set('submit_lyrics_enabled', $request->submit_lyrics_enabled ? '1' : '0');
        SiteSetting::set('correction_enabled', $request->correction_enabled ? '1' : '0');

        $status = $request->submit_lyrics_enabled ? 'مفعّل' : 'معطّل';
        $correctionStatus = $request->correction_enabled ? 'مفعّل' : 'معطّل';
        flash("تم تحديث إعدادات إرسال الكلمات - الإرسال الآن: {$status}، التصحيح: {$correctionStatus}")->success();
        return redirect('/admin/settings');
    }

    public function updateAdsense(Request $request)
    {
        $publisherId = trim($request->adsense_publisher_id ?? '');

        // Validate format
        if ($publisherId && !preg_match('/^pub-\d{16}$/', $publisherId)) {
            flash('معرّف الناشر غير صحيح. يجب أن يكون بالصيغة pub-0000000000000000')->error();
            return redirect('/admin/settings');
        }

        SiteSetting::set('adsense_enabled', $request->adsense_enabled ? '1' : '0');
        SiteSetting::set('adsense_publisher_id', $publisherId);

        $status = $request->adsense_enabled ? 'مفعّل' : 'معطّل';
        flash("تم تحديث إعدادات AdSense - الحالة: {$status}")->success();
        return redirect('/admin/settings');
    }

    public function updateRecaptcha(Request $request)
    {
        SiteSetting::set('recaptcha_enabled', $request->recaptcha_enabled ? '1' : '0');
        SiteSetting::set('recaptcha_site_key', $request->recaptcha_site_key ?? '');
        SiteSetting::set('recaptcha_secret_key', $request->recaptcha_secret_key ?? '');

        $status = $request->recaptcha_enabled ? 'مفعّل' : 'معطّل';
        flash("تم تحديث إعدادات reCAPTCHA - الحالة: {$status}")->success();
        return redirect('/admin/settings');
    }

    public function updateStats(Request $request)
    {
        SiteSetting::set('stats_enabled', $request->stats_enabled ? '1' : '0');
        SiteSetting::set('stats_songs', is_numeric($request->stats_songs) ? (int) $request->stats_songs : '');
        SiteSetting::set('stats_artists', is_numeric($request->stats_artists) ? (int) $request->stats_artists : '');
        SiteSetting::set('stats_views', is_numeric($request->stats_views) ? (int) $request->stats_views : '');
        SiteSetting::set('stats_users', is_numeric($request->stats_users) ? (int) $request->stats_users : '');

        flash('تم تحديث إعدادات الإحصائيات بنجاح')->success();
        return redirect('/admin/settings');
    }
}
