<?php
// Conexão com o banco antigo
$host_old = "10.132.36.2";
$user_old = "motionfi2b8aa4b4_admin";
$pass_old = "Ti@uh7ed9d7";
$db_old = "motionfi2b8aa4b4_form";

try {
    $pdo_old = new PDO(
        "mysql:host=$host_old;dbname=$db_old;charset=utf8mb4",
        $user_old,
        $pass_old,
        [
            PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
            PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
        ]
    );
    echo "<p style='color:green;'>Conectado ao banco antigo</p>";
} catch (PDOException $e) {
    die("<p style='color:red;'>Erro de conexão (antigo banco): " . $e->getMessage() . "</p>");
}

// Conexão com o banco novo
$host_new = "10.132.36.2";
$user_new = "motionfi2b8aa4b4_admin";
$pass_new = "Ti@uh7ed9d7";
$db_new = "motionfi2b8aa4b4_gestao_forms";

try {
    $pdo_new = new PDO(
        "mysql:host=$host_new;dbname=$db_new;charset=utf8mb4",
        $user_new,
        $pass_new,
        [
            PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
            PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
        ]
    );
    echo "<p style='color:green;'>Conectado ao banco novo</p>";
} catch (PDOException $e) {
    die("<p style='color:red;'>Erro de conexão (novo banco): " . $e->getMessage() . "</p>");
}

// Abrindo log
$log_file = __DIR__ . '/migração_log.txt';
file_put_contents($log_file, "=== Início da Migração: " . date('Y-m-d H:i:s') . " ===\n", FILE_APPEND);

// Puxar todas as respostas antigas
$stmt = $pdo_old->query("SELECT * FROM form_responses");
$respostas_antigas = $stmt->fetchAll();

echo "<h2>Migração de " . count($respostas_antigas) . " respostas</h2>";

foreach ($respostas_antigas as $index => $resposta) {
    echo "<hr>";
    echo "<p><strong>Processando resposta #{$resposta['id']} (".($index + 1).")</strong></p>";
    file_put_contents($log_file, "Processando resposta ID: {$resposta['id']}\n", FILE_APPEND);

    try {
        // Pega o formulário antigo
        $stmt_form = $pdo_old->prepare("SELECT * FROM forms WHERE id = ?");
        $stmt_form->execute([$resposta['form_id']]);
        $form_antigo = $stmt_form->fetch();

        if (!$form_antigo) {
            echo "<p style='color:red;'>Formulário antigo não encontrado para form_id: {$resposta['form_id']}</p>";
            file_put_contents($log_file, "Formulário antigo não encontrado para form_id: {$resposta['form_id']}\n", FILE_APPEND);
            continue;
        }

        // Verificar se o formulário já existe no novo banco
        $stmt_check_form = $pdo_new->prepare("SELECT id FROM formularios WHERE nome = ?");
        $stmt_check_form->execute([$form_antigo['title']]);
        $novo_form_id = $stmt_check_form->fetchColumn();

        if (!$novo_form_id) {
            // Inserir formulário no novo banco
            $stmt_insert_form = $pdo_new->prepare("INSERT INTO formularios (nome) VALUES (?)");
            $stmt_insert_form->execute([$form_antigo['title']]);
            $novo_form_id = $pdo_new->lastInsertId();
            echo "<p style='color:blue;'>Formulário '{$form_antigo['title']}' criado com ID {$novo_form_id}</p>";
            file_put_contents($log_file, "Formulário '{$form_antigo['title']}' criado com ID {$novo_form_id}\n", FILE_APPEND);
        } else {
            echo "<p>Formulário '{$form_antigo['title']}' já existe com ID {$novo_form_id}</p>";
            file_put_contents($log_file, "Formulário '{$form_antigo['title']}' já existe com ID {$novo_form_id}\n", FILE_APPEND);
        }

        // Decodifica os dados do response_data (JSON)
        $respostas_json = json_decode($resposta['response_data'], true);
        if (!$respostas_json) {
            echo "<p style='color:red;'>Erro ao decodificar JSON da resposta #{$resposta['id']}</p>";
            file_put_contents($log_file, "Erro ao decodificar JSON da resposta ID: {$resposta['id']}\n", FILE_APPEND);
            continue;
        }

        // Inserir uma nova resposta no novo banco
        $stmt_insert_resposta = $pdo_new->prepare("INSERT INTO formulario_respostas (formulario_id) VALUES (?)");
        $stmt_insert_resposta->execute([$novo_form_id]);
        $novo_resposta_id = $pdo_new->lastInsertId();
        echo "<p>Nova resposta criada com ID {$novo_resposta_id}</p>";
        file_put_contents($log_file, "Nova resposta criada com ID {$novo_resposta_id}\n", FILE_APPEND);

        foreach ($respostas_json as $label => $valor) {

            // Verificar se o campo já existe para este formulário
            $stmt_check_campo = $pdo_new->prepare("SELECT id FROM formulario_campos WHERE formulario_id = ? AND label = ?");
            $stmt_check_campo->execute([$novo_form_id, $label]);
            $novo_campo_id = $stmt_check_campo->fetchColumn();

            if (!$novo_campo_id) {
                // Inserir campo no novo banco
                $stmt_insert_campo = $pdo_new->prepare("INSERT INTO formulario_campos (formulario_id, label, tipo) VALUES (?, ?, ?)");
                $tipo = 'text';
                if (is_array($valor)) $tipo = 'text';
                $stmt_insert_campo->execute([$novo_form_id, $label, $tipo]);
                $novo_campo_id = $pdo_new->lastInsertId();
                echo "<p style='color:orange;'>Campo '{$label}' criado com ID {$novo_campo_id}</p>";
                file_put_contents($log_file, "Campo '{$label}' criado com ID {$novo_campo_id}\n", FILE_APPEND);
            } else {
                echo "<p>Campo '{$label}' já existe com ID {$novo_campo_id}</p>";
                file_put_contents($log_file, "Campo '{$label}' já existe com ID {$novo_campo_id}\n", FILE_APPEND);
            }

            // Preparar valor
            if (is_array($valor)) {
                $valor = implode(", ", $valor);
            }

            // Inserir valor no novo banco
            $stmt_insert_resposta_campo = $pdo_new->prepare(
                "INSERT INTO formulario_respostas_campos (resposta_id, campo_id, valor) VALUES (?, ?, ?)"
            );
            $stmt_insert_resposta_campo->execute([$novo_resposta_id, $novo_campo_id, $valor]);
            echo "<p>Valor inserido: <strong>{$valor}</strong></p>";
            file_put_contents($log_file, "Valor inserido no campo ID {$novo_campo_id}: {$valor}\n", FILE_APPEND);
        }

    } catch (PDOException $e) {
        echo "<p style='color:red;'>Erro: " . $e->getMessage() . "</p>";
        file_put_contents($log_file, "Erro: " . $e->getMessage() . "\n", FILE_APPEND);
    }
}

echo "<h2 style='color:green;'>Migração concluída!</h2>";
file_put_contents($log_file, "=== Fim da Migração: " . date('Y-m-d H:i:s') . " ===\n", FILE_APPEND);
