<?php

namespace App\Console\Commands;

use App\Models\DnsQueryUsage;
use App\Models\User;
use App\Services\DnsQueryLimitService;
use Illuminate\Console\Command;
use Illuminate\Support\Facades\Log;

class ResetDailyDnsLimits extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'dns:reset-daily-limits
        {--reactivate : Reactivează zonele suspendate pentru limită depășită}';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'Resetează contoarele zilnice de query-uri DNS și opțional reactivează zonele suspendate';

    /**
     * Execute the console command.
     */
    public function handle(DnsQueryLimitService $limitService)
    {
        $this->info('🔄 Resetare contoare zilnice DNS...');
        $startTime = microtime(true);

        // Resetează contoarele zilnice
        $resetCount = $limitService->resetDailyCounters();
        $this->info("✓ Resetate {$resetCount} înregistrări de utilizare");

        // Reactivează zonele dacă este cerut
        if ($this->option('reactivate')) {
            $this->info('🔓 Reactivare zone suspendate pentru limită depășită...');

            $users = User::whereHas('dnsZones', function ($query) {
                $query->where('status', 'suspended')
                      ->where('suspension_reason', 'LIKE', '%limită%');
            })->get();

            $zonesReactivated = 0;
            foreach ($users as $user) {
                $limitService->reactivateUserZones($user);
                $zonesReactivated += $user->dnsZones()
                    ->where('status', 'suspended')
                    ->where('suspension_reason', 'LIKE', '%limită%')
                    ->count();
            }

            $this->info("✓ Reactivate zone pentru {$users->count()} utilizatori");
        }

        $duration = round(microtime(true) - $startTime, 2);
        $this->info("⏱️ Durata: {$duration}s");

        Log::info('Resetare zilnică limite DNS completată', [
            'reset_count' => $resetCount,
            'duration' => $duration,
        ]);

        return Command::SUCCESS;
    }
}
