<?php
// Arquivo: includes/DNSUpdater.php
// Classe para atualizar DNS em tempo real

class DNSUpdater {
    private $db;
    
    public function __construct() {
        $this->db = new SQLite3(dirname(__DIR__) . '/a/.eggziedb.db');
        $this->db->busyTimeout(5000);
    }
    
    /**
     * Atualiza todos os usuários que usam uma determinada DNS
     * @param string $old_dns URL antiga da DNS
     * @param string $new_dns URL nova da DNS
     * @param string $owner_type Tipo do proprietário (admin, revenda, sub_revenda)
     * @param string $owner_name Nome do proprietário
     * @return int Número de usuários atualizados
     */
    public function updateUsersDNS($old_dns, $new_dns, $owner_type, $owner_name) {
        $updated = 0;
        
        try {
            // Atualizar usuários que usam esta DNS
            $stmt = $this->db->prepare("UPDATE ibo SET url = :new_dns WHERE url = :old_dns AND seller = :owner_name");
            $stmt->bindValue(':new_dns', $new_dns, SQLITE3_TEXT);
            $stmt->bindValue(':old_dns', $old_dns, SQLITE3_TEXT);
            $stmt->bindValue(':owner_name', $owner_name, SQLITE3_TEXT);
            $result = $stmt->execute();
            
            if ($result) {
                $updated = $this->db->changes();
            }
            
            // Registrar log
            $log_file = dirname(__DIR__) . '/a/dns_update_log.txt';
            $log_entry = date('Y-m-d H:i:s') . " - {$owner_type}:{$owner_name} - Atualizou DNS de '{$old_dns}' para '{$new_dns}' - {$updated} usuários afetados\n";
            file_put_contents($log_file, $log_entry, FILE_APPEND);
            
        } catch (Exception $e) {
            error_log("Erro ao atualizar DNS: " . $e->getMessage());
        }
        
        return $updated;
    }
    
    /**
     * Obtém todos os usuários que usam uma determinada DNS
     * @param string $dns URL da DNS
     * @param string $owner_name Nome do proprietário
     * @return array Lista de usuários
     */
    public function getUsersByDNS($dns, $owner_name) {
        $users = [];
        
        try {
            $stmt = $this->db->prepare("SELECT id, username, mac_address, title FROM ibo WHERE url = :dns AND seller = :owner_name");
            $stmt->bindValue(':dns', $dns, SQLITE3_TEXT);
            $stmt->bindValue(':owner_name', $owner_name, SQLITE3_TEXT);
            $result = $stmt->execute();
            
            while ($row = $result->fetchArray(SQLITE3_ASSOC)) {
                $users[] = $row;
            }
        } catch (Exception $e) {
            error_log("Erro ao buscar usuários por DNS: " . $e->getMessage());
        }
        
        return $users;
    }
    
    public function close() {
        if ($this->db) {
            $this->db->close();
        }
    }
    
    public function __destruct() {
        $this->close();
    }
}
?>