"""
第4课：AI 金句工坊 — 最终版后端
调用 AI API 实时生成金句
"""

from flask import Flask, request, jsonify, send_from_directory
from flask_cors import CORS
import os
import json
from openai import OpenAI
from dotenv import load_dotenv

load_dotenv()

app = Flask(__name__, static_folder='.')
CORS(app)

# ===== 配置 =====
MOCK_MODE = os.getenv("MOCK", "true").lower() == "true"
API_KEY = os.getenv("DEEPSEEK_API_KEY", "")

client = OpenAI(
    api_key=API_KEY,
    base_url="https://api.deepseek.com/v1"
)

# ===== 模拟数据（没 API Key 也能用） =====
MOCK_QUOTES = [
    {"quote": "不积跬步，无以至千里", "author": "荀子"},
    {"quote": "学而不思则罔，思而不学则殆", "author": "孔子"},
    {"quote": "想象力比知识更重要", "author": "爱因斯坦"},
    {"quote": "创新就是把事物联系起来", "author": "乔布斯"},
    {"quote": "千里之行，始于足下", "author": "老子"},
    {"quote": "天行健，君子以自强不息", "author": "《周易》"},
    {"quote": "知者不惑，仁者不忧，勇者不惧", "author": "孔子"},
    {"quote": "志不立，天下无可成之事", "author": "王阳明"},
]

# ===== 路由 =====

@app.route('/')
def index():
    return send_from_directory('.', 'index.html')


@app.route('/api/quote', methods=['POST'])
def generate_quote():
    data = request.get_json()
    topic = data.get('topic', '').strip()

    if not topic:
        return jsonify({'error': '请输入一个主题'}), 400

    # 模拟模式（无需 API Key）
    if MOCK_MODE or not API_KEY:
        import random
        return jsonify(random.choice(MOCK_QUOTES))

    # 真实模式（调用 AI API）
    try:
        response = client.chat.completions.create(
            model="deepseek-chat",
            messages=[
                {"role": "system", "content": "你是一个金句生成器。根据主题生成一句有哲理的名言金句，并注明作者。作者可以是真实或虚构的。只返回JSON：{\"quote\": \"...\", \"author\": \"...\"}"},
                {"role": "user", "content": f"主题：{topic}"}
            ],
            temperature=0.8,
            max_tokens=200
        )

        content = response.choices[0].message.content.strip()
        # 去掉 markdown 代码块标记
        if content.startswith("```"):
            content = content.split("\n", 1)[1].rsplit("\n", 1)[0]
        result = json.loads(content)
        return jsonify(result)

    except Exception as e:
        return jsonify({'error': f'调用 AI 失败：{str(e)}'}), 500

# ===== 启动 =====
if __name__ == '__main__':
    mode = "🎯 模拟模式" if (MOCK_MODE or not API_KEY) else "🤖 AI 实时生成模式"
    print("=" * 40)
    print("  🚀 AI 金句工坊 最终版")
    print("=" * 40)
    print(f"  📌 {mode}")
    print(f"  🔗 http://localhost:5000")
    print("=" * 40)
    app.run(host='0.0.0.0', port=5000, debug=True)
