<?php

namespace App\Console\Commands;

use App\Models\DnsZone;
use Illuminate\Console\Command;

class CheckDuplicatesForZone extends Command
{
    protected $signature = 'dns:check-duplicates {domain}';
    protected $description = 'Verifică duplicatele pentru un domeniu specific';

    public function handle()
    {
        $domain = $this->argument('domain');
        $zone = DnsZone::where('domain', $domain)->first();

        if (!$zone) {
            $this->error("Zona {$domain} nu a fost găsită!");
            return 1;
        }

        $this->info("Verificare zone pentru: {$domain} (ID: {$zone->id})");
        $this->newLine();

        // Obține toate înregistrările NS
        $nsRecords = $zone->records()->where('type', 'NS')->get();
        
        $this->info("Total înregistrări NS: " . $nsRecords->count());
        $this->newLine();

        foreach ($nsRecords as $record) {
            $this->line(sprintf(
                "ID: %d | Name: [%s] (len:%d) | Type: %s | Content: [%s] (len:%d)",
                $record->id,
                $record->name,
                strlen($record->name),
                $record->type,
                $record->content,
                strlen($record->content)
            ));
            
            // Afișează hex pentru a vedea caractere ascunse
            $this->line("  Name HEX: " . bin2hex($record->name));
            $this->line("  Content HEX: " . bin2hex($record->content));
            $this->newLine();
        }

        // Caută duplicate
        $seen = [];
        $duplicates = [];
        
        foreach ($nsRecords as $record) {
            $key = trim($record->name) . '|' . trim($record->type) . '|' . trim($record->content);
            if (isset($seen[$key])) {
                $duplicates[] = ['original' => $seen[$key], 'duplicate' => $record->id];
                $this->warn("DUPLICAT GĂSIT: ID {$record->id} este duplicat al ID {$seen[$key]}");
            } else {
                $seen[$key] = $record->id;
            }
        }

        if (empty($duplicates)) {
            $this->info("Nu s-au găsit duplicate!");
        } else {
            $this->error("Găsite " . count($duplicates) . " duplicate!");
        }

        return 0;
    }
}
