<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

/**
 * Migrare pentru adăugarea limitei zilnice de query-uri DNS în planuri
 *
 * Această migrare adaugă:
 * - dns_queries_limit_daily: Limita maximă de query-uri DNS pe zi
 * - overage_action: Acțiunea la depășirea limitei (notify, refuse, suspend)
 * - overage_grace_percent: Procentul de grație înainte de acțiune (ex: 120%)
 */
return new class extends Migration
{
    /**
     * Rulează migrarea
     */
    public function up(): void
    {
        Schema::table('plans', function (Blueprint $table) {
            // Limita zilnică de query-uri DNS (null = fără limită zilnică, doar lunară)
            $table->unsignedBigInteger('dns_queries_limit_daily')->nullable()->after('dns_queries_limit')
                ->comment('Limita maximă de query-uri DNS pe zi. Null = fără limită zilnică.');

            // Acțiunea la depășirea limitei: notify, refuse, suspend
            $table->enum('overage_action', ['notify', 'refuse', 'suspend'])
                ->default('notify')->after('dns_queries_limit_daily')
                ->comment('Acțiunea la depășirea limitei: notify=doar notificare, refuse=refuză query, suspend=suspendă zona');

            // Procentul de grație înainte de a aplica acțiunea (ex: 120 = 120% din limită)
            $table->unsignedTinyInteger('overage_grace_percent')->default(100)->after('overage_action')
                ->comment('Procentul de grație înainte de acțiune. 100=exact la limită, 120=20% extra');
        });

        // Actualizăm și tabela dns_query_usage pentru tracking zilnic
        Schema::table('dns_query_usage', function (Blueprint $table) {
            // Adăugăm câmp pentru ziua (pentru tracking zilnic)
            $table->unsignedTinyInteger('day')->nullable()->after('month')
                ->comment('Ziua pentru tracking zilnic. Null = total lunar.');

            // Adăugăm câmp pentru query-uri zilnice
            $table->unsignedBigInteger('daily_query_count')->default(0)->after('query_count')
                ->comment('Numărul de query-uri DNS pentru ziua curentă');

            // Flag pentru alertă zilnică
            $table->boolean('daily_alert_sent')->default(false)->after('alert_100_sent')
                ->comment('Flag pentru alertă zilnică trimisă');

            // Timestamp pentru ultima resetare zilnică
            $table->timestamp('last_daily_reset')->nullable()->after('daily_alert_sent')
                ->comment('Timestamp pentru ultima resetare a contorului zilnic');
        });
    }

    /**
     * Inversează migrarea
     */
    public function down(): void
    {
        Schema::table('plans', function (Blueprint $table) {
            $table->dropColumn([
                'dns_queries_limit_daily',
                'overage_action',
                'overage_grace_percent'
            ]);
        });

        Schema::table('dns_query_usage', function (Blueprint $table) {
            $table->dropColumn([
                'day',
                'daily_query_count',
                'daily_alert_sent',
                'last_daily_reset'
            ]);
        });
    }
};
