<?php

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

/**
 * AutoSSL Settings — server-wide SSL/AutoSSL policy.
 *
 * Phase 1 Epic 9
 */
return new class extends Migration
{
    public function up(): void
    {
        Schema::create('autossl_settings', function (Blueprint $table) {
            $table->id();
            $table->string('key')->unique();
            $table->text('value')->nullable();
            $table->text('default_value')->nullable();
            $table->string('category')->default('general');
            $table->string('data_type')->default('string');
            $table->text('description_tr')->nullable();
            $table->timestamps();
        });

        $now = now();

        $rows = [
            // General
            ['key' => 'enabled',             'value' => '1',              'default_value' => '1',              'category' => 'general',       'data_type' => 'boolean', 'description_tr' => 'AutoSSL otomatik sertifika temini'],
            ['key' => 'force_https_redirect', 'value' => '1',              'default_value' => '1',              'category' => 'general',       'data_type' => 'boolean', 'description_tr' => 'HTTP isteklerini HTTPS\'e yönlendir'],
            ['key' => 'ocsp_stapling',        'value' => '1',              'default_value' => '1',              'category' => 'general',       'data_type' => 'boolean', 'description_tr' => 'OCSP Stapling aktif et'],
            ['key' => 'hsts_enabled',         'value' => '1',              'default_value' => '1',              'category' => 'general',       'data_type' => 'boolean', 'description_tr' => 'HTTP Strict Transport Security aktif et'],
            ['key' => 'hsts_max_age',         'value' => '31536000',       'default_value' => '31536000',       'category' => 'general',       'data_type' => 'integer', 'description_tr' => 'HSTS max-age (saniye)'],

            // Providers
            ['key' => 'provider_primary',     'value' => 'letsencrypt',    'default_value' => 'letsencrypt',    'category' => 'providers',     'data_type' => 'enum',    'description_tr' => 'Birincil ACME sağlayıcı'],
            ['key' => 'provider_fallback',    'value' => 'zerosss',        'default_value' => 'zerosss',        'category' => 'providers',     'data_type' => 'enum',    'description_tr' => 'Yedek ACME sağlayıcı'],
            ['key' => 'letsencrypt_email',    'value' => 'admin@onox.com.tr', 'default_value' => '',            'category' => 'providers',     'data_type' => 'string',  'description_tr' => "Let's Encrypt hesap e-postası"],
            ['key' => 'challenge_type',       'value' => 'http-01',        'default_value' => 'http-01',        'category' => 'providers',     'data_type' => 'enum',    'description_tr' => 'ACME challenge tipi'],

            // Retry
            ['key' => 'auto_renew_days_before',       'value' => '30', 'default_value' => '30', 'category' => 'retry', 'data_type' => 'integer', 'description_tr' => 'Bu kadar gün kala otomatik yenile'],
            ['key' => 'retry_failed_interval_hours',  'value' => '6',  'default_value' => '6',  'category' => 'retry', 'data_type' => 'integer', 'description_tr' => 'Başarısız denemeler arası bekleme (saat)'],
            ['key' => 'max_retries_per_domain',       'value' => '5',  'default_value' => '5',  'category' => 'retry', 'data_type' => 'integer', 'description_tr' => 'Domain başına maksimum yenileme denemesi'],
            ['key' => 'pause_on_max_retries',         'value' => '24', 'default_value' => '24', 'category' => 'retry', 'data_type' => 'integer', 'description_tr' => 'Maks deneme sonra X saat duraklat'],

            // Notifications
            ['key' => 'notify_on_failure',           'value' => '1',  'default_value' => '1',  'category' => 'notifications', 'data_type' => 'boolean', 'description_tr' => 'Sertifika başarısız olduğunda bildir'],
            ['key' => 'notify_email',                'value' => '',   'default_value' => '',   'category' => 'notifications', 'data_type' => 'string',  'description_tr' => 'Bildirim e-posta adresi'],
            ['key' => 'notify_days_before_expiry',   'value' => '14', 'default_value' => '14', 'category' => 'notifications', 'data_type' => 'integer', 'description_tr' => 'Sona ermeden X gün önce bildir'],

            // Hostname
            ['key' => 'hostname_cert_enabled', 'value' => '1',                  'default_value' => '1',  'category' => 'hostname', 'data_type' => 'boolean', 'description_tr' => 'Panel hostname için ayrı sertifika tut'],
            ['key' => 'hostname_cert_domain',  'value' => 'panel.onox.com.tr', 'default_value' => '',   'category' => 'hostname', 'data_type' => 'string',  'description_tr' => 'Panel hostname domain adı'],
            ['key' => 'wildcard_enabled',      'value' => '0',                  'default_value' => '0',  'category' => 'hostname', 'data_type' => 'boolean', 'description_tr' => 'Wildcard sertifika (DNS-01 gerektirir)'],
        ];

        foreach ($rows as &$row) {
            $row['created_at'] = $now;
            $row['updated_at'] = $now;
        }
        unset($row);

        DB::table('autossl_settings')->insert($rows);
    }

    public function down(): void
    {
        Schema::dropIfExists('autossl_settings');
    }
};
