<?php
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');

if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') {
    exit(0);
}

require_once '../includes/auth.php';
require_once '../includes/gpt_api.php';
require_once '../config/database.php';

$auth = new Auth();
$auth->requireLogin();

$database = new Database();
$db = $database->getConnection();

$input = json_decode(file_get_contents('php://input'), true);
$action = $input['action'] ?? $_GET['action'] ?? '';

try {
    switch ($action) {
        case 'analyze_content':
            analyzeContent($db, $input);
            break;
        case 'optimize_content':
            optimizeContent($db, $input);
            break;
        case 'generate_meta':
            generateMeta($db, $input);
            break;
        case 'analyze_keywords':
            analyzeKeywords($db, $input);
            break;
        case 'suggest_improvements':
            suggestImprovements($db, $input);
            break;
        case 'check_technical_seo':
            checkTechnicalSEO($db, $input);
            break;
        case 'generate_sitemap':
            generateSitemap($db, $input);
            break;
        case 'analyze_competitors':
            analyzeCompetitors($db, $input);
            break;
        default:
            throw new Exception('無效的操作');
    }
} catch (Exception $e) {
    http_response_code(400);
    echo json_encode([
        'success' => false,
        'message' => $e->getMessage()
    ]);
}

function analyzeContent($db, $input) {
    $content = $input['content'] ?? '';
    $title = $input['title'] ?? '';
    $keywords = $input['keywords'] ?? '';
    $url = $input['url'] ?? '';
    
    if (empty($content)) {
        throw new Exception('缺少內容');
    }
    
    $gpt = new GPTAPI();
    $analysis = $gpt->analyzeContentSEO($content, $title, $keywords, $url);
    
    // Save analysis to database
    saveSEOAnalysis($db, $input, $analysis, 'content_analysis');
    
    echo json_encode([
        'success' => true,
        'data' => $analysis
    ]);
}

function optimizeContent($db, $input) {
    $content = $input['content'] ?? '';
    $title = $input['title'] ?? '';
    $keywords = $input['keywords'] ?? '';
    $target_audience = $input['target_audience'] ?? '';
    $optimization_goals = $input['optimization_goals'] ?? [];
    
    if (empty($content)) {
        throw new Exception('缺少內容');
    }
    
    $gpt = new GPTAPI();
    $optimized = $gpt->optimizeContentSEO($content, $title, $keywords, $target_audience, $optimization_goals);
    
    // Save optimization to database
    saveSEOAnalysis($db, $input, $optimized, 'content_optimization');
    
    echo json_encode([
        'success' => true,
        'data' => $optimized
    ]);
}

function generateMeta($db, $input) {
    $title = $input['title'] ?? '';
    $content = $input['content'] ?? '';
    $keywords = $input['keywords'] ?? '';
    $brand_name = $input['brand_name'] ?? '';
    
    if (empty($title) && empty($content)) {
        throw new Exception('缺少標題或內容');
    }
    
    $gpt = new GPTAPI();
    $meta = $gpt->generateMetaTags($title, $content, $keywords, $brand_name);
    
    echo json_encode([
        'success' => true,
        'data' => $meta
    ]);
}

function analyzeKeywords($db, $input) {
    $content = $input['content'] ?? '';
    $target_keywords = $input['target_keywords'] ?? '';
    $competitor_urls = $input['competitor_urls'] ?? [];
    
    if (empty($content)) {
        throw new Exception('缺少內容');
    }
    
    $gpt = new GPTAPI();
    $analysis = $gpt->analyzeKeywordDensity($content, $target_keywords, $competitor_urls);
    
    echo json_encode([
        'success' => true,
        'data' => $analysis
    ]);
}

function suggestImprovements($db, $input) {
    $content = $input['content'] ?? '';
    $title = $input['title'] ?? '';
    $keywords = $input['keywords'] ?? '';
    $current_ranking = $input['current_ranking'] ?? 0;
    $target_ranking = $input['target_ranking'] ?? 1;
    
    if (empty($content)) {
        throw new Exception('缺少內容');
    }
    
    $gpt = new GPTAPI();
    $suggestions = $gpt->suggestSEOImprovements($content, $title, $keywords, $current_ranking, $target_ranking);
    
    echo json_encode([
        'success' => true,
        'data' => $suggestions
    ]);
}

function checkTechnicalSEO($db, $input) {
    $url = $input['url'] ?? '';
    $content = $input['content'] ?? '';
    
    if (empty($url) && empty($content)) {
        throw new Exception('缺少URL或內容');
    }
    
    $gpt = new GPTAPI();
    $technical = $gpt->checkTechnicalSEO($url, $content);
    
    echo json_encode([
        'success' => true,
        'data' => $technical
    ]);
}

function generateSitemap($db, $input) {
    $brand_id = $input['brand_id'] ?? '';
    $urls = $input['urls'] ?? [];
    
    if (empty($brand_id) && empty($urls)) {
        throw new Exception('缺少品牌ID或URL列表');
    }
    
    // Get URLs from database if brand_id provided
    if (!empty($brand_id)) {
        $query = "SELECT DISTINCT target_url FROM seo_tracking WHERE brand_id = :brand_id AND target_url IS NOT NULL AND target_url != ''";
        $stmt = $db->prepare($query);
        $stmt->bindParam(':brand_id', $brand_id);
        $stmt->execute();
        $urls = $stmt->fetchAll(PDO::FETCH_COLUMN);
    }
    
    $gpt = new GPTAPI();
    $sitemap = $gpt->generateSitemap($urls);
    
    echo json_encode([
        'success' => true,
        'data' => $sitemap
    ]);
}

function analyzeCompetitors($db, $input) {
    $target_keywords = $input['target_keywords'] ?? '';
    $competitor_urls = $input['competitor_urls'] ?? [];
    $brand_id = $input['brand_id'] ?? '';
    
    if (empty($target_keywords)) {
        throw new Exception('缺少目標關鍵字');
    }
    
    $gpt = new GPTAPI();
    $analysis = $gpt->analyzeCompetitorSEO($target_keywords, $competitor_urls, $brand_id);
    
    echo json_encode([
        'success' => true,
        'data' => $analysis
    ]);
}

function saveSEOAnalysis($db, $input, $result, $type) {
    $query = "INSERT INTO seo_analysis_history (brand_id, analysis_type, input_data, result_data, created_at) 
              VALUES (:brand_id, :analysis_type, :input_data, :result_data, NOW())";
    $stmt = $db->prepare($query);
    $stmt->bindParam(':brand_id', $input['brand_id'] ?? null);
    $stmt->bindParam(':analysis_type', $type);
    $stmt->bindParam(':input_data', json_encode($input));
    $stmt->bindParam(':result_data', json_encode($result));
    $stmt->execute();
}
?>
