<?php

namespace App\Console\Commands;

use App\Facades\Registrar;
use Illuminate\Console\Command;

class RegistrarTest extends Command
{
    /**
     * Komutun adı ve imzası
     *
     * @var string
     */
    protected $signature = 'module:registrar-test 
                            {module : Test edilecek registrar modülü} 
                            {domain : Test edilecek domain adı} 
                            {--nameservers=* : Test için kullanılacak nameserver listesi}';

    /**
     * Komutun açıklaması
     *
     * @var string
     */
    protected $description = 'Domain kayıt sağlayıcı modülünü test etmeye yarar';

    /**
     * Komutu çalıştır
     */
    public function handle()
    {
        $moduleName = $this->argument('module');
        $domain = $this->argument('domain');
        $nameservers = $this->option('nameservers') ?: ['ns1.example.com', 'ns2.example.com'];

        $this->info(__('console.registrar_test_starting', ['module' => $moduleName]));

        try {
            if (! Registrar::has($moduleName)) {
                $this->error(__('console.registrar_test_module_not_found', ['module' => $moduleName]));

                return 1;
            }

            $module = Registrar::get($moduleName);

            // Nameserver sorgulama testi
            $this->info(__('console.registrar_test_nameservers_testing'));
            $params = [
                'domain' => $domain,
            ];

            $response = $module->getNameservers($params);
            $this->table(
                [__('console.registrar_test_status'), __('console.registrar_test_message')],
                [[
                    $response['status'] ?? __('console.registrar_test_unknown'),
                    $response['message'] ?? json_encode($response),
                ]]
            );

            // Domain durumu sorgulama testi
            $this->info(__('console.registrar_test_domain_status'));
            $this->table([__('console.registrar_test_property'), __('console.registrar_test_value')], [
                ['Domain', $domain],
                ['Modül', $moduleName],
                ['Modül Sınıfı', get_class($module)],
            ]);

            return 0;
        } catch (\Exception $e) {
            $this->error(__('console.registrar_test_error', ['message' => $e->getMessage()]));

            return 1;
        }
    }
}
