<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Cache;
use App\Models\Setting;
use App\Models\LandingMenu;

/**
 * Controller pentru pagina principală (Landing Page)
 * Afișează informații publice despre serviciul DNS Panel
 */
class LandingController extends Controller
{
    /**
     * Afișează landing page-ul cu statistici și planuri
     */
    public function index()
    {
        // Cache statisticile pentru 5 minute pentru performanță
        $stats = Cache::remember('landing_stats', 300, function () {
            return $this->getStatistics();
        });

        // Obține planurile disponibile
        $plans = Cache::remember('landing_plans', 600, function () {
            return $this->getPlans();
        });

        // Features principale
        $features = $this->getFeatures();

        // Obține meniul landing (cache pentru 1 oră)
        $menus = LandingMenu::getMenuTree();

        // Obține numele site-ului din setări (cache pentru 1 oră)
        $siteName = Cache::remember('site_name', 3600, function () {
            return Setting::get('app_name', config('app.name', 'Gazduire DNS'));
        });

        return view('welcome', compact('stats', 'plans', 'features', 'siteName', 'menus'));
    }

    /**
     * Obține statisticile pentru landing page
     * Folosește un sistem de statistici în creștere pentru a afișa numere impresionante
     */
    private function getStatistics(): array
    {
        // Data de referință (18 decembrie 2025)
        $referenceDate = \Carbon\Carbon::create(2025, 12, 18);
        $today = now()->startOfDay();
        $daysPassed = max(0, $referenceDate->diffInDays($today, false));

        // Valori de bază și rate de creștere zilnică
        $baseZones = 2100;
        $baseUsers = 500;
        $baseRecords = 12500;

        $dailyZonesGrowth = 2;
        $dailyUsersGrowth = 3;
        $dailyRecordsGrowth = 47;

        // Calculează valorile actuale
        $zones = $baseZones + ($daysPassed * $dailyZonesGrowth);
        $users = $baseUsers + ($daysPassed * $dailyUsersGrowth);
        $records = $baseRecords + ($daysPassed * $dailyRecordsGrowth);

        return [
            'zones' => $this->formatNumber($zones),
            'users' => $this->formatNumber($users),
            'records' => $this->formatNumber($records),
            'dyndns_hosts' => $this->formatNumber(150 + ($daysPassed * 1)), // Bonus: și DynDNS crește
            'uptime' => '99.9%',
            'queries_daily' => $this->formatNumber(250000 + ($daysPassed * 5000)), // Interogări zilnice
        ];
    }

    /**
     * Obține numărul de interogări DNS zilnice
     */
    private function getDailyQueries(): int
    {
        try {
            // Încearcă să obțină statistici reale din dns_statistics sau dns_query_usage
            $today = now()->toDateString();

            $queries = DB::table('dns_statistics')
                ->whereDate('created_at', $today)
                ->sum('query_count');

            if ($queries > 0) {
                return (int) $queries;
            }

            // Fallback la dns_query_usage
            $queries = DB::table('dns_query_usage')
                ->whereDate('date', $today)
                ->sum('query_count');

            return (int) $queries ?: 0;
        } catch (\Exception $e) {
            return 0;
        }
    }

    /**
     * Obține planurile disponibile
     */
    private function getPlans(): array
    {
        try {
            $plans = DB::table('plans')
                ->where('is_active', true)
                ->orderBy('price')
                ->get();

            if ($plans->isEmpty()) {
                return $this->getDefaultPlans();
            }

            return $plans->map(function ($plan) {
                return [
                    'id' => $plan->id,
                    'name' => $plan->name,
                    'price' => $plan->price,
                    'currency' => $plan->currency ?? 'RON',
                    'period' => $plan->billing_period ?? 'lunar',
                    'max_zones' => $plan->max_zones ?? 1,
                    'max_records' => $plan->max_records_per_zone ?? 10,
                    'features' => json_decode($plan->features ?? '[]', true),
                    'is_popular' => $plan->is_popular ?? false,
                ];
            })->toArray();
        } catch (\Exception $e) {
            return $this->getDefaultPlans();
        }
    }

    /**
     * Planuri default dacă nu există în DB
     */
    private function getDefaultPlans(): array
    {
        return [
            [
                'id' => 1,
                'name' => 'Free',
                'price' => 0,
                'currency' => 'RON',
                'period' => 'lunar',
                'max_zones' => 1,
                'max_records' => 10,
                'features' => ['1 Zonă DNS', '10 Înregistrări', 'DynDNS Basic', 'Suport Email'],
                'is_popular' => false,
            ],
            [
                'id' => 2,
                'name' => 'Pro',
                'price' => 29,
                'currency' => 'RON',
                'period' => 'lunar',
                'max_zones' => 10,
                'max_records' => 100,
                'features' => ['10 Zone DNS', '100 Înregistrări/zonă', 'DynDNS Avansat', 'DNSSEC', 'API Access', 'Suport Prioritar'],
                'is_popular' => true,
            ],
            [
                'id' => 3,
                'name' => 'Business',
                'price' => 99,
                'currency' => 'RON',
                'period' => 'lunar',
                'max_zones' => 100,
                'max_records' => 1000,
                'features' => ['100 Zone DNS', '1000 Înregistrări/zonă', 'DynDNS Nelimitat', 'DNSSEC', 'API Access', 'White Label', 'Suport 24/7'],
                'is_popular' => false,
            ],
        ];
    }

    /**
     * Features principale ale serviciului
     */
    private function getFeatures(): array
    {
        return [
            [
                'icon' => 'fas fa-globe',
                'title' => 'Zone DNS',
                'description' => 'Gestionează-ți zonele DNS cu ușurință. Suport complet pentru toate tipurile de înregistrări: A, AAAA, CNAME, MX, TXT, SRV și multe altele.',
                'color' => 'blue',
            ],
            [
                'icon' => 'fas fa-sync-alt',
                'title' => 'Dynamic DNS',
                'description' => 'Actualizare automată a IP-ului pentru conexiuni dinamice. Perfect pentru servere home, camere IP sau acces remote.',
                'color' => 'green',
            ],
            [
                'icon' => 'fas fa-shield-alt',
                'title' => 'Securitate Avansată',
                'description' => 'Protecție cu 2FA, CAPTCHA inteligent, IP Whitelist și rate limiting. Datele tale sunt în siguranță.',
                'color' => 'purple',
            ],
            [
                'icon' => 'fas fa-chart-line',
                'title' => 'Statistici în Timp Real',
                'description' => 'Dashboard interactiv cu grafice și monitorizare. Vezi cine accesează domeniile tale și de unde.',
                'color' => 'orange',
            ],
            [
                'icon' => 'fas fa-code',
                'title' => 'API RESTful',
                'description' => 'Integrează DNS Panel în aplicațiile tale. API complet documentat cu exemple pentru toate limbajele.',
                'color' => 'cyan',
            ],
            [
                'icon' => 'fas fa-key',
                'title' => 'DNSSEC',
                'description' => 'Semnare criptografică pentru zone DNS. Protejează-ți utilizatorii împotriva atacurilor DNS spoofing.',
                'color' => 'red',
            ],
        ];
    }

    /**
     * Formatează numerele mari
     */
    private function formatNumber(int $number): string
    {
        if ($number >= 1000000) {
            return round($number / 1000000, 1) . 'M';
        } elseif ($number >= 1000) {
            return round($number / 1000, 1) . 'K';
        }
        return (string) $number;
    }

    /**
     * Afișează o pagină landing dinamică
     * Suportă template-uri personalizate bazate pe slug-ul paginii
     */
    public function showPage(string $slug)
    {
        $page = \App\Models\LandingPage::where('slug', $slug)
            ->where('is_published', true)
            ->firstOrFail();

        // Obține meniul pentru header
        $menus = LandingMenu::getMenuTree();

        // Obține numele site-ului din setări
        $siteName = Cache::remember('site_name', 3600, function () {
            return Setting::get('app_name', config('app.name', 'Gazduire DNS'));
        });

        // Verifică dacă există un template personalizat pentru acest slug
        // Template-urile personalizate sunt stocate în resources/views/landing/{slug}.blade.php
        $customTemplate = 'landing.' . $slug;

        if (view()->exists($customTemplate)) {
            return view($customTemplate, compact('page', 'menus', 'siteName'));
        }

        // Dacă pagina are un template specificat în baza de date, îl folosim
        if ($page->template && view()->exists('landing.' . $page->template)) {
            return view('landing.' . $page->template, compact('page', 'menus', 'siteName'));
        }

        // Template implicit pentru pagini generice
        return view('landing.page', compact('page', 'menus', 'siteName'));
    }
}
