<?php
/**
 * 硅基流动API代理模块
 * 通过后端代理调用硅基流动API，保护API密钥不被泄露
 * 硅基流动：https://siliconflow.cn
 */

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, Authorization');

// 处理预检请求
if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') {
    http_response_code(200);
    exit();
}

// 硅基流动API配置
// 在硅基流动官网注册获取API Key
$SILICONFLOW_API_KEY = 'sk-bcczdchfdqzvrdcaozkubiypsmgathqotfsdgjshowosyumg'; // 你的硅基流动API Key
$SILICONFLOW_API_URL = 'https://api.siliconflow.cn/v1/chat/completions';
// 可用模型列表（按优先级排序，从API获取的有效模型）
$AVAILABLE_MODELS = [
    'deepseek-ai/DeepSeek-V4-Pro',
    'deepseek-ai/DeepSeek-V4-Flash',
    'deepseek-ai/DeepSeek-Chat',
    'Qwen/Qwen-7B-Chat',
    'Qwen/Qwen-14B-Chat'
];

// 本地知识库（作为备用）
$knowledgeBase = [
    "如何策划婚礼" => "婚礼策划主要包括：确定预算、选择日期、场地预订、婚庆公司选择、四大金刚（司仪、摄影、摄像、化妆）、婚纱礼服准备等步骤。建议提前6-12个月开始筹备。",
    "婚礼预算分配" => "合理的婚礼预算分配：婚宴场地40%-50%、婚庆策划15%-20%、四大金刚15%-20%、婚纱礼服10%-15%、其他费用5%-10%。阳泉中等规模婚礼预算约3-8万元。",
    "阳泉婚庆公司" => "阳泉本地推荐婚庆公司：阳泉喜洋洋婚庆（老字号）、盛世良缘（创意策划）、花嫁喜事（性价比高）、金玉满堂（高端定制）。",
    "传统婚俗" => "阳泉传统婚俗：提亲（男方请媒人）、定亲（交换彩礼）、送日子（选择吉日）、迎娶（迎亲仪式）、拜堂（一拜天地、二拜高堂、夫妻对拜）、闹洞房。",
    "婚礼日期选择" => "选择婚礼日期考虑：黄历吉日（避开忌日）、季节因素（春秋季是旺季）、节假日（方便亲友但价格高）、双方生辰（结合八字择日）。",
    "电子请柬制作" => "制作电子请柬步骤：登录系统 → 选择模板 → 填写新人信息、日期、地点 → 上传照片 → 预览效果 → 分享给亲友。点击导航栏\"请柬\"即可使用。",
    "婚礼流程" => "婚礼当天流程：上午（08:00新娘化妆、10:00迎亲出发、11:00堵门游戏、11:30接亲仪式）；下午（14:00酒店彩排、17:00宾客签到）；晚上（19:00仪式开始、21:00婚宴结束）。",
    "父母致辞" => "父母致辞要点：感谢来宾（欢迎亲朋好友）、回顾成长（回忆新人点滴）、表达祝福（期望和祝福）、再次感谢（感谢支持）。时间控制在3-5分钟为宜。",
    "婚纱选择" => "选择婚纱技巧：根据身材选款式（A字裙适合大多数人）、考虑婚礼场地（户外选轻便款，室内可选华丽款）、试穿时要走动测试舒适度、预算充足可定制。",
    "伴郎伴娘" => "伴郎伴娘职责：协助新人处理婚礼事务、保管物品、引导宾客、活跃气氛。人数通常为双数，与新人关系密切为佳。",
    "婚礼摄影" => "婚礼摄影要点：提前沟通拍摄风格、列出必拍镜头清单、准备备用电池和存储卡、安排专门时间拍摄合影、婚礼后及时备份照片。",
    "婚宴菜单" => "婚宴菜单搭配：冷盘4-6道、热菜8-12道、汤品1道、主食2道、甜点2道。考虑宾客口味差异，提供素食选择。",
    "婚车安排" => "婚车安排：主婚车选豪华车型，跟车数量为双数（6辆或8辆），统一装饰风格，提前规划路线，安排专人负责调度。"
];

/**
 * 调用单个模型
 */
function callSingleModel($message, $apiKey, $apiUrl, $model) {
    $data = [
        'model' => $model,
        'messages' => [
            [
                'role' => 'system',
                'content' => '你是一位专业的婚礼顾问AI助手，擅长解答婚礼策划相关问题。请用友好、专业的语言回答用户的问题，提供详细实用的建议。'
            ],
            [
                'role' => 'user',
                'content' => $message
            ]
        ],
        'temperature' => 0.7,
        'max_tokens' => 2048,
        'stream' => false
    ];

    $ch = curl_init($apiUrl);
    curl_setopt_array($ch, [
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_TIMEOUT => 30,
        CURLOPT_SSL_VERIFYPEER => false,
        CURLOPT_SSL_VERIFYHOST => false,
        CURLOPT_POST => true,
        CURLOPT_POSTFIELDS => json_encode($data),
        CURLOPT_HTTPHEADER => [
            'Content-Type: application/json',
            'Authorization: Bearer ' . $apiKey
        ]
    ]);

    $response = curl_exec($ch);
    $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    $error = curl_error($ch);
    curl_close($ch);

    if ($response === false) {
        return [
            'success' => false,
            'error' => '网络请求失败',
            'message' => $error
        ];
    }

    if ($httpCode !== 200) {
        return [
            'success' => false,
            'error' => 'API请求失败',
            'http_code' => $httpCode,
            'message' => $response
        ];
    }

    $result = json_decode($response, true);
    
    if (json_last_error() !== JSON_ERROR_NONE) {
        return [
            'success' => false,
            'error' => '响应解析失败',
            'message' => $response
        ];
    }

    if (isset($result['choices'][0]['message']['content'])) {
        return [
            'success' => true,
            'response' => $result['choices'][0]['message']['content'],
            'usage' => $result['usage'] ?? null,
            'model' => $model
        ];
    }

    return [
        'success' => false,
        'error' => 'API返回格式异常',
        'message' => $result
    ];
}

/**
 * 调用硅基流动API（带多模型回退）
 */
function callSiliconFlowAPI($message, $apiKey, $apiUrl, $model) {
    global $AVAILABLE_MODELS;
    
    if (empty($apiKey)) {
        return [
            'success' => false,
            'error' => 'API密钥未配置',
            'message' => '请在api/siliconflow_api.php中配置硅基流动API密钥'
        ];
    }

    // 先尝试用户指定的模型
    if (!empty($model)) {
        $result = callSingleModel($message, $apiKey, $apiUrl, $model);
        if ($result['success']) {
            return $result;
        }
        // 如果指定模型失败，尝试其他模型
    }

    // 按优先级尝试其他可用模型
    foreach ($AVAILABLE_MODELS as $availableModel) {
        if ($availableModel === $model) continue; // 跳过已尝试的模型
        
        $result = callSingleModel($message, $apiKey, $apiUrl, $availableModel);
        if ($result['success']) {
            return $result;
        }
    }

    // 所有模型都失败
    return [
        'success' => false,
        'error' => '所有模型调用失败',
        'message' => '请检查API密钥或稍后重试'
    ];
}

/**
 * 从本地知识库获取答案
 */
function getKnowledgeBaseAnswer($question) {
    global $knowledgeBase;
    
    // 精确匹配
    if (isset($knowledgeBase[$question])) {
        return $knowledgeBase[$question];
    }
    
    // 模糊匹配
    foreach ($knowledgeBase as $key => $answer) {
        if (strpos($question, $key) !== false || strpos($key, $question) !== false) {
            return $answer;
        }
    }
    
    return null;
}

/**
 * 处理请求
 */
function handleRequest() {
    global $SILICONFLOW_API_KEY, $SILICONFLOW_API_URL, $AVAILABLE_MODELS;
    
    if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
        return [
            'success' => false,
            'error' => '不支持的请求方法',
            'message' => '请使用POST方法'
        ];
    }

    $input = json_decode(file_get_contents('php://input'), true);
    if (!$input || !isset($input['message'])) {
        return [
            'success' => false,
            'error' => '参数错误',
            'message' => '缺少message参数'
        ];
    }

    $message = trim($input['message']);
    if (empty($message)) {
        return [
            'success' => false,
            'error' => '消息为空',
            'message' => '请输入有效消息'
        ];
    }

    // 获取用户指定的模型（可选），默认使用第一个可用模型
    $defaultModel = !empty($AVAILABLE_MODELS) ? $AVAILABLE_MODELS[0] : '';
    $model = $input['model'] ?? $defaultModel;

    // 先尝试本地知识库
    $kbAnswer = getKnowledgeBaseAnswer($message);
    if ($kbAnswer) {
        return [
            'success' => true,
            'response' => $kbAnswer,
            'source' => 'knowledge_base'
        ];
    }

    // 如果配置了API密钥，尝试调用硅基流动API
    if (!empty($SILICONFLOW_API_KEY)) {
        $result = callSiliconFlowAPI($message, $SILICONFLOW_API_KEY, $SILICONFLOW_API_URL, $model);
        if ($result['success']) {
            $result['source'] = 'siliconflow_api';
            return $result;
        }
        // API失败，继续回退到本地知识库或默认响应
    }

    // 如果知识库也没有答案，返回默认响应
    $kbAnswer = getKnowledgeBaseAnswer($message);
    if ($kbAnswer) {
        return [
            'success' => true,
            'response' => $kbAnswer,
            'source' => 'knowledge_base'
        ];
    }

    // 默认响应
    return [
        'success' => true,
        'response' => '感谢您的提问！关于"' . $message . '"，我可以为您提供婚礼相关的帮助。请问您需要了解婚礼策划、预算分配、流程安排还是其他方面的内容呢？',
        'source' => 'default'
    ];
}

// 执行请求处理
$result = handleRequest();
echo json_encode($result, JSON_UNESCAPED_UNICODE);
?>