/**
 * gamma-generate Edge Function
 * 使用 Gamma API 生成项目介绍 PPT
 * 
 * 功能：
 * 1. 生成项目介绍演示文稿
 * 2. 查询生成状态
 * 3. 返回可下载的 PPT 链接
 */

import { createClient } from 'https://esm.sh/@supabase/supabase-js@2.57.4';

const corsHeaders = {
  'Access-Control-Allow-Origin': '*',
  'Access-Control-Allow-Headers': 'authorization, x-client-info, apikey, content-type, x-supabase-client-platform, x-supabase-client-platform-version, x-supabase-client-runtime, x-supabase-client-runtime-version',
};

const GAMMA_API_URL = 'https://public-api.gamma.app/v1.0';

// 项目介绍内容 - 作为产品经理编写的完整介绍
const PROJECT_INTRO_CONTENT = `
# AI 智能电商平台 - 项目介绍

---

## 项目概述

这是一个 AI 驱动的智能电商平台，将人工智能深度融入电商运营的各个环节。

**核心定位**: 
- 面向中小型电商商家的一站式智能运营解决方案
- 通过 AI 赋能，大幅降低运营成本，提升转化效率

**目标用户**:
- B端：电商店铺经营者、运营团队
- C端：追求个性化购物体验的消费者

---

## 核心功能亮点

### 🤖 双引擎 AI 架构
- **Coze 引擎**: 扣子平台，擅长多轮对话和复杂意图理解
- **Dify 引擎**: 开源 AI 编排，灵活可控的工作流
- **智能切换**: 根据场景自动选择最优引擎

### 💬 智能购物助手
- 自然语言商品推荐
- 多轮对话理解上下文
- 个性化记忆（Mem0 三明治架构）
- 实时库存和价格同步

### 📊 四大角色 AI 管理
| 角色 | 名称 | 职责 |
|------|------|------|
| 店铺经理 | 小管 | 整体运营决策、数据分析 |
| 商品经理 | 小品 | 选品策略、定价建议、库存预警 |
| 营销经理 | 小营 | 活动策划、促销推送、用户增长 |
| 客服经理 | 小服 | 售后处理、投诉管理、服务质量 |

---

## 技术架构

### 前端技术栈
- **框架**: React 18 + TypeScript
- **UI**: Tailwind CSS + shadcn/ui
- **状态**: React Context + Hooks
- **路由**: React Router v6

### 后端技术栈
- **平台**: Supabase (PostgreSQL + Edge Functions)
- **实时**: Supabase Realtime
- **存储**: Supabase Storage
- **认证**: Supabase Auth

### AI 集成
- **Coze API**: 消费者对话引擎
- **Dify API**: 管理后台 AI 引擎
- **Lovable AI Gateway**: Gemini/GPT 模型访问
- **Mem0**: 用户记忆管理

---

## 创新特色

### 🧠 三明治记忆架构
\`\`\`
用户输入 → 查询 Mem0 历史 → AI 生成回复 → 存储新记忆
\`\`\`
- 跨会话的用户偏好记忆
- 智能上下文注入
- 个性化推荐优化

### 📱 GenUI 动态界面
- AI 根据意图动态生成 UI 组件
- 无需硬编码，灵活适应业务变化
- 统一的组件库规范

### 🔒 数据库唯一真相源
- 所有业务数据来自数据库
- AI 严禁编造数据
- 完整的数据校验机制

---

## 商业价值

### 对 B 端商家
- **降本**: 减少 70% 客服人力成本
- **增效**: AI 辅助决策提升运营效率 3 倍
- **智能**: 数据驱动的选品和定价建议

### 对 C 端消费者
- **个性化**: 懂你所需的购物助手
- **便捷**: 自然语言交互，告别复杂筛选
- **信任**: 真实数据，透明价格

---

## 项目愿景

> 让每一家电商都能拥有 AI 超级员工

我们相信，AI 不是取代人类，而是赋能人类。通过这个平台，小微电商也能享受到大企业级别的智能运营能力。

---

## 团队与联系

- **开发**: Lovable AI 辅助开发
- **架构**: 前后端分离 + Serverless
- **部署**: 自动化 CI/CD

**感谢您的关注！**
`;

Deno.serve(async (req) => {
  // Handle CORS preflight
  if (req.method === 'OPTIONS') {
    return new Response('ok', { headers: corsHeaders });
  }

  try {
    const GAMMA_API_KEY = Deno.env.get('GAMMA_API_KEY');
    if (!GAMMA_API_KEY) {
      throw new Error('GAMMA_API_KEY is not configured');
    }

    const url = new URL(req.url);
    const action = url.searchParams.get('action') || 'generate';
    const generationId = url.searchParams.get('id');

    // 初始化 Supabase 客户端用于身份验证（可选）
    const supabaseUrl = Deno.env.get('SUPABASE_URL')!;
    const supabaseKey = Deno.env.get('SUPABASE_ANON_KEY')!;
    const supabase = createClient(supabaseUrl, supabaseKey);

    // ========== 查询生成状态 ==========
    if (action === 'status' && generationId) {
      console.log(`📊 [Gamma] 查询生成状态: ${generationId}`);
      
      const response = await fetch(`${GAMMA_API_URL}/generations/${generationId}`, {
        method: 'GET',
        headers: {
          'X-API-KEY': GAMMA_API_KEY,
        },
      });

      if (!response.ok) {
        const errorText = await response.text();
        console.error(`❌ [Gamma] 查询失败: ${response.status} - ${errorText}`);
        throw new Error(`Gamma API error: ${response.status}`);
      }

      const result = await response.json();
      console.log(`✅ [Gamma] 状态: ${result.status}`);
      
      return new Response(JSON.stringify(result), {
        headers: { ...corsHeaders, 'Content-Type': 'application/json' },
      });
    }

    // ========== 创建生成任务 ==========
    if (action === 'generate') {
      console.log('🚀 [Gamma] 开始生成项目介绍 PPT...');

      // 可选：从请求体获取自定义内容
      let inputText = PROJECT_INTRO_CONTENT;
      if (req.method === 'POST') {
        try {
          const body = await req.json();
          if (body.customContent) {
            inputText = body.customContent;
          }
        } catch {
          // 使用默认内容
        }
      }

      const requestBody = {
        inputText,
        textMode: 'preserve',  // 保留原始结构
        format: 'presentation',
        exportAs: 'pptx',  // 直接导出为 PPTX
        textOptions: {
          language: 'zh-cn',
          tone: 'professional',
        },
        cardOptions: {
          dimensions: '16x9',
        },
        imageOptions: {
          source: 'pexels',  // 使用 Pexels 图片
        },
      };

      console.log('📤 [Gamma] 请求参数:', JSON.stringify(requestBody, null, 2));

      const response = await fetch(`${GAMMA_API_URL}/generations`, {
        method: 'POST',
        headers: {
          'X-API-KEY': GAMMA_API_KEY,
          'Content-Type': 'application/json',
        },
        body: JSON.stringify(requestBody),
      });

      if (!response.ok) {
        const errorText = await response.text();
        console.error(`❌ [Gamma] 生成失败: ${response.status} - ${errorText}`);
        throw new Error(`Gamma API error: ${response.status} - ${errorText}`);
      }

      const result = await response.json();
      console.log(`✅ [Gamma] 任务已创建: ${result.generationId}`);

      return new Response(JSON.stringify({
        success: true,
        generationId: result.generationId,
        message: 'PPT 生成任务已创建，请稍后查询状态',
      }), {
        headers: { ...corsHeaders, 'Content-Type': 'application/json' },
      });
    }

    // ========== 获取项目介绍内容（预览）==========
    if (action === 'preview') {
      return new Response(JSON.stringify({
        content: PROJECT_INTRO_CONTENT,
        sections: [
          '项目概述',
          '核心功能亮点',
          '技术架构',
          '创新特色',
          '商业价值',
          '项目愿景',
        ],
      }), {
        headers: { ...corsHeaders, 'Content-Type': 'application/json' },
      });
    }

    return new Response(JSON.stringify({
      error: 'Invalid action',
      validActions: ['generate', 'status', 'preview'],
    }), {
      status: 400,
      headers: { ...corsHeaders, 'Content-Type': 'application/json' },
    });

  } catch (error) {
    console.error('❌ [Gamma] 错误:', error);
    return new Response(JSON.stringify({
      success: false,
      error: (error instanceof Error ? error.message : 'Unknown error'),
    }), {
      status: 500,
      headers: { ...corsHeaders, 'Content-Type': 'application/json' },
    });
  }
});
