<?php

namespace App\Http\Controllers\Admin;

use App\Http\Controllers\Controller;
use App\Helpers\ThemeHelper;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;

class ThemeController extends Controller
{
    /**
     * Mostra la pagina di personalizzazione tema
     */
    public function index()
    {
        $currentTheme = ThemeHelper::getUserTheme();
        $presetThemes = ThemeHelper::getPresetThemes();
        
        return view('admin.theme.index', compact('currentTheme', 'presetThemes'));
    }

    /**
     * Salva le impostazioni del tema personalizzato
     */
    public function save(Request $request)
    {
        $request->validate([
            'primary_color' => 'required|regex:/^#([a-f0-9]{3}){1,2}$/i',
            'secondary_color' => 'required|regex:/^#([a-f0-9]{3}){1,2}$/i',
            'success_color' => 'required|regex:/^#([a-f0-9]{3}){1,2}$/i',
            'danger_color' => 'required|regex:/^#([a-f0-9]{3}){1,2}$/i',
            'warning_color' => 'required|regex:/^#([a-f0-9]{3}){1,2}$/i',
            'info_color' => 'required|regex:/^#([a-f0-9]{3}){1,2}$/i',
            'light_color' => 'required|regex:/^#([a-f0-9]{3}){1,2}$/i',
            'dark_color' => 'required|regex:/^#([a-f0-9]{3}){1,2}$/i',
            'sidebar_bg' => 'required|regex:/^#([a-f0-9]{3}){1,2}$/i',
            'sidebar_text' => 'required|regex:/^#([a-f0-9]{3}){1,2}$/i',
            'header_bg' => 'required|regex:/^#([a-f0-9]{3}){1,2}$/i',
            'header_text' => 'required|regex:/^#([a-f0-9]{3}){1,2}$/i',
            'theme_mode' => 'required|in:light,dark'
        ]);

        $themeData = $request->only([
            'primary_color', 'secondary_color', 'success_color', 'danger_color',
            'warning_color', 'info_color', 'light_color', 'dark_color',
            'sidebar_bg', 'sidebar_text', 'header_bg', 'header_text', 'theme_mode'
        ]);

        $success = ThemeHelper::saveUserTheme(Auth::id(), $themeData);

        if ($success) {
            return response()->json([
                'success' => true,
                'message' => 'Tema salvato con successo!',
                'css' => ThemeHelper::generateCustomCSS()
            ]);
        } else {
            return response()->json([
                'success' => false,
                'message' => 'Errore nel salvataggio del tema.'
            ], 500);
        }
    }

    /**
     * Applica un tema predefinito
     */
    public function applyPreset(Request $request)
    {
        $request->validate([
            'preset' => 'required|string'
        ]);

        $success = ThemeHelper::applyPresetTheme(Auth::id(), $request->preset);

        if ($success) {
            return response()->json([
                'success' => true,
                'message' => 'Tema predefinito applicato con successo!',
                'css' => ThemeHelper::generateCustomCSS(),
                'theme' => ThemeHelper::getUserTheme()
            ]);
        } else {
            return response()->json([
                'success' => false,
                'message' => 'Tema predefinito non trovato.'
            ], 404);
        }
    }

    /**
     * Resetta il tema ai valori di default
     */
    public function reset()
    {
        $success = ThemeHelper::saveUserTheme(Auth::id(), ThemeHelper::DEFAULT_THEME);

        if ($success) {
            return response()->json([
                'success' => true,
                'message' => 'Tema ripristinato ai valori di default!',
                'css' => ThemeHelper::generateCustomCSS(),
                'theme' => ThemeHelper::getUserTheme()
            ]);
        } else {
            return response()->json([
                'success' => false,
                'message' => 'Errore nel ripristino del tema.'
            ], 500);
        }
    }

    /**
     * Ottiene il CSS personalizzato per l'utente corrente
     */
    public function getCss()
    {
        $css = ThemeHelper::generateCustomCSS();
        
        return response($css)
            ->header('Content-Type', 'text/css')
            ->header('Cache-Control', 'public, max-age=3600');
    }

    /**
     * Esporta le impostazioni del tema corrente
     */
    public function export()
    {
        $theme = ThemeHelper::getUserTheme();
        $filename = 'netgescon_tema_' . Auth::user()->name . '_' . date('Y-m-d') . '.json';
        
        return response()->json($theme)
            ->header('Content-Disposition', 'attachment; filename="' . $filename . '"');
    }

    /**
     * Importa impostazioni tema da file JSON
     */
    public function import(Request $request)
    {
        $request->validate([
            'theme_file' => 'required|file|mimes:json'
        ]);

        try {
            $fileContent = file_get_contents($request->file('theme_file')->getRealPath());
            $themeData = json_decode($fileContent, true);

            if (!$themeData) {
                throw new \Exception('File JSON non valido');
            }

            // Valida che contenga almeno i campi essenziali
            $requiredFields = ['primary_color', 'sidebar_bg', 'header_bg'];
            foreach ($requiredFields as $field) {
                if (!isset($themeData[$field])) {
                    throw new \Exception("Campo mancante nel file: $field");
                }
            }

            $success = ThemeHelper::saveUserTheme(Auth::id(), $themeData);

            if ($success) {
                return response()->json([
                    'success' => true,
                    'message' => 'Tema importato con successo!',
                    'css' => ThemeHelper::generateCustomCSS(),
                    'theme' => ThemeHelper::getUserTheme()
                ]);
            } else {
                throw new \Exception('Errore nel salvataggio del tema importato');
            }

        } catch (\Exception $e) {
            return response()->json([
                'success' => false,
                'message' => 'Errore nell\'importazione: ' . $e->getMessage()
            ], 400);
        }
    }
}
