<?php
// api/auto-register-page.php - VERSÃO FUNCIONAL

header('Content-Type: application/json');
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: POST, GET, OPTIONS');
header('Access-Control-Allow-Headers: Content-Type, X-Requested-With');

// Função de log simples
function logAutoRegister($message) {
    error_log("[AUTO-REGISTER] " . date('Y-m-d H:i:s') . " - " . $message);
}

try {
    logAutoRegister("=== INICIANDO AUTO-REGISTER ===");
    
    // Verificar método OPTIONS
    if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') {
        http_response_code(200);
        echo json_encode(['status' => 'options_ok']);
        exit;
    }
    
    // Define BASE_PATH
    if (!defined('BASE_PATH')) {
        define('BASE_PATH', dirname(dirname(__FILE__)));
    }
    
    // Incluir arquivos necessários
    require_once BASE_PATH . '/includes/config.php';
    require_once BASE_PATH . '/includes/db.php';
    require_once BASE_PATH . '/includes/functions.php';
    
    logAutoRegister("Arquivos incluídos com sucesso");
    
    // Verificar se é GET (para teste)
    if ($_SERVER['REQUEST_METHOD'] === 'GET') {
        global $db;
        
        // Listar páginas auto-criadas
        $db->query("SELECT id, title, slug, type, created_at 
                   FROM pages 
                   WHERE content LIKE '%registrada automaticamente%'
                   ORDER BY created_at DESC 
                   LIMIT 10");
        $autoPages = $db->resultSet();
        
        echo json_encode([
            'success' => true,
            'status' => 'auto_register_api',
            'auto_created_pages' => $autoPages,
            'total_auto_pages' => count($autoPages),
            'message' => 'API funcionando corretamente'
        ]);
        exit;
    }
    
    // Verificar se é POST
    if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
        throw new Exception("Método não permitido: " . $_SERVER['REQUEST_METHOD']);
    }
    
    logAutoRegister("Processando requisição POST");
    
    // Obter e validar dados
    $rawInput = file_get_contents('php://input');
    $input = json_decode($rawInput, true);
    
    if (json_last_error() !== JSON_ERROR_NONE) {
        throw new Exception('Erro JSON: ' . json_last_error_msg());
    }
    
    if (empty($input['page_url'])) {
        throw new Exception('URL da página é obrigatória');
    }
    
    $pageUrl = trim($input['page_url']);
    $pageTitle = isset($input['page_title']) ? trim($input['page_title']) : '';
    $pageType = isset($input['page_type']) ? trim($input['page_type']) : '';
    
    logAutoRegister("Dados recebidos - URL: {$pageUrl}, Título: {$pageTitle}, Tipo: {$pageType}");
    
    // **FUNÇÃO 1: Normalizar URL**
    function normalizeUrl($url) {
        $parsed = parse_url($url);
        $path = isset($parsed['path']) ? $parsed['path'] : '/';
        $path = rtrim($path, '/');
        return empty($path) ? '/' : $path;
    }
    
    // **FUNÇÃO 2: Gerar slug da URL**
    function generateSlugFromUrl($url) {
        $path = normalizeUrl($url);
        $path = preg_replace('/\.(php|html|htm)$/', '', $path);
        $slug = str_replace('/', '-', $path);
        $slug = preg_replace('/[^a-zA-Z0-9\-_]/', '', $slug);
        $slug = ltrim($slug, '-');
        return empty($slug) ? 'home' : $slug;
    }
    
    // **FUNÇÃO 3: Detectar tipo de página**
    function detectPageType($url, $title) {
        $path = strtolower(normalizeUrl($url));
        $titleLower = strtolower($title);
        
        // Detectar apenas tipos válidos do ENUM
        if (strpos($path, 'landing') !== false || strpos($titleLower, 'landing') !== false) {
            return 'landing';
        }
        if (strpos($path, 'step1') !== false || strpos($path, 'etapa1') !== false || 
            strpos($titleLower, 'step1') !== false || strpos($titleLower, 'etapa1') !== false) {
            return 'step1';
        }
        if (strpos($path, 'step2') !== false || strpos($path, 'etapa2') !== false ||
            strpos($titleLower, 'step2') !== false || strpos($titleLower, 'etapa2') !== false) {
            return 'step2';
        }
        if (strpos($path, 'step3') !== false || strpos($path, 'etapa3') !== false ||
            strpos($titleLower, 'step3') !== false || strpos($titleLower, 'etapa3') !== false) {
            return 'step3';
        }
        if (strpos($path, 'registration') !== false || strpos($path, 'registro') !== false ||
            strpos($path, 'inscri') !== false || strpos($titleLower, 'inscri') !== false) {
            return 'registration';
        }
        
        return 'landing'; // Padrão
    }
    
    // **FUNÇÃO 4: Tornar slug único**
    function makeSlugUnique($slug) {
        global $db;
        $originalSlug = $slug;
        $counter = 1;
        
        while (true) {
            $db->query("SELECT id FROM pages WHERE slug = :slug");
            $db->bind(':slug', $slug);
            
            if (!$db->single()) {
                break;
            }
            
            $slug = $originalSlug . '-' . $counter;
            $counter++;
        }
        
        return $slug;
    }
    
    // **FUNÇÃO 5: Gerar título da URL**
    function generateTitleFromUrl($url) {
        $path = normalizeUrl($url);
        $path = preg_replace('/\.(php|html|htm)$/', '', $path);
        $parts = explode('/', trim($path, '/'));
        $lastPart = end($parts);
        
        if (empty($lastPart) || $lastPart === 'home') {
            return 'Página Auto-Registrada';
        }
        
        $title = str_replace(['-', '_'], ' ', $lastPart);
        return ucwords($title);
    }
    
    // Processar dados
    $slug = generateSlugFromUrl($pageUrl);
    
    // Verificar se página já existe
    global $db;
    $db->query("SELECT id, title, type FROM pages WHERE slug = :slug LIMIT 1");
    $db->bind(':slug', $slug);
    $existingPage = $db->single();
    
    if ($existingPage) {
        logAutoRegister("Página existente encontrada: ID " . $existingPage['id']);
        echo json_encode([
            'success' => true,
            'page_id' => $existingPage['id'],
            'page_title' => $existingPage['title'],
            'page_type' => $existingPage['type'],
            'action' => 'found_existing'
        ]);
        exit;
    }
    
    // Criar nova página
    $validTypes = ['landing', 'step1', 'step2', 'step3', 'registration'];
    $detectedType = detectPageType($pageUrl, $pageTitle);
    
    // Usar tipo detectado se o fornecido não for válido
    if (!in_array($pageType, $validTypes)) {
        $pageType = $detectedType;
    }
    
    // Gerar título se vazio
    if (empty($pageTitle)) {
        $pageTitle = generateTitleFromUrl($pageUrl);
    }
    
    // Tornar slug único
    $uniqueSlug = makeSlugUnique($slug);
    
    // Gerar conteúdo
    $content = "<h1>{$pageTitle}</h1>\n";
    $content .= "<p>Esta página foi registrada automaticamente pelo sistema de analytics.</p>\n";
    $content .= "<p><strong>Tipo:</strong> " . ucfirst($pageType) . "</p>\n";
    $content .= "<p><strong>Data de criação:</strong> " . date('d/m/Y H:i') . "</p>\n";
    $content .= "<p><strong>URL original:</strong> {$pageUrl}</p>\n";
    $content .= "<p><em>Você pode editar este conteúdo no painel administrativo.</em></p>";
    
    logAutoRegister("Inserindo nova página no banco...");
    
    // Inserir no banco
    $db->query("INSERT INTO pages 
                (title, slug, content, type, published, landing_page_id, created_at, updated_at) 
                VALUES (:title, :slug, :content, :type, 1, 0, NOW(), NOW())");
    
    $db->bind(':title', $pageTitle);
    $db->bind(':slug', $uniqueSlug);
    $db->bind(':content', $content);
    $db->bind(':type', $pageType);
    
    $db->execute();
    $pageId = $db->lastInsertId();
    
    logAutoRegister("Página criada com sucesso! ID: {$pageId}");
    
    echo json_encode([
        'success' => true,
        'page_id' => $pageId,
        'page_title' => $pageTitle,
        'page_type' => $pageType,
        'action' => 'created_new',
        'slug' => $uniqueSlug
    ]);
    
} catch (Exception $e) {
    logAutoRegister("ERRO: " . $e->getMessage());
    
    http_response_code(500);
    echo json_encode([
        'success' => false,
        'error' => $e->getMessage(),
        'debug_info' => [
            'file' => __FILE__,
            'line' => $e->getLine(),
            'timestamp' => date('Y-m-d H:i:s')
        ]
    ]);
}
?>