/**
 * 系统架构描述 - 为AI智能体提供完整的系统理解
 * System Architecture Schema for AI Agent Deep Understanding
 */

import { ADMIN_OPERATIONS, getOperationsByCategory } from '@/types/adminOperations';

export interface SystemSchema {
  version: string;
  description: string;
  database: DatabaseSchema;
  businessRules: BusinessRules;
  capabilities: Capability[];
  operations?: any; // 管理操作定义
}

export interface DatabaseSchema {
  tables: TableDefinition[];
  relationships: Relationship[];
  enums: EnumDefinition[];
}

export interface TableDefinition {
  name: string;
  description: string;
  columns: ColumnDefinition[];
  policies: string[];
  sampleData?: any[];
}

export interface ColumnDefinition {
  name: string;
  type: string;
  nullable: boolean;
  description: string;
  constraints?: string[];
}

export interface Relationship {
  from: string;
  to: string;
  type: 'one-to-one' | 'one-to-many' | 'many-to-many' | 'many-to-one';
  description: string;
}

export interface EnumDefinition {
  name: string;
  values: string[];
  description: string;
}

export interface BusinessRules {
  orderWorkflow: string[];
  productManagement: string[];
  userManagement: string[];
  afterSales: string[];
}

export interface Capability {
  name: string;
  type: 'query' | 'mutation' | 'analysis' | 'navigation' | 'creation';
  description: string;
  parameters: ParameterDefinition[];
  examples: string[];
}

export interface ParameterDefinition {
  name: string;
  type: string;
  required: boolean;
  description: string;
}

/**
 * 获取完整的系统架构描述
 */
export const getSystemSchema = (currentData?: {
  products?: any[];
  orders?: any[];
  users?: any[];
  afterSales?: any[];
  brands?: any[];
  categories?: any[];
  statistics?: any;
}): SystemSchema => {
  return {
    version: '1.0.0',
    description: '智能电商管理系统 - 完整数据模型和业务规则',
    operations: getOperationsByCategory(), // 添加完整的操作定义
    
    database: {
      tables: [
        {
          name: 'products',
          description: '商品信息表 - 存储所有商品数据',
          columns: [
            { name: 'id', type: 'uuid', nullable: false, description: '商品唯一标识' },
            { name: 'name', type: 'text', nullable: false, description: '商品名称' },
            { name: 'description', type: 'text', nullable: true, description: '商品描述' },
            { name: 'price', type: 'numeric', nullable: false, description: '商品价格（元）' },
            { name: 'stock_quantity', type: 'integer', nullable: false, description: '库存数量' },
            { name: 'category', type: 'text', nullable: true, description: '商品分类' },
            { name: 'brand', type: 'text', nullable: true, description: '商品品牌' },
            { name: 'is_active', type: 'boolean', nullable: false, description: '是否上架' },
            { name: 'is_hot', type: 'boolean', nullable: false, description: '是否热销' },
            { name: 'is_recommended', type: 'boolean', nullable: false, description: '是否推荐' },
            { name: 'images', type: 'text[]', nullable: true, description: '商品图片列表' },
            { name: 'specifications', type: 'jsonb', nullable: true, description: '商品规格参数' },
          ],
          policies: ['管理员可以管理所有商品', '所有人可以查看上架商品'],
          sampleData: currentData?.products?.slice(0, 3),
        },
        {
          name: 'orders',
          description: '订单信息表 - 存储用户订单',
          columns: [
            { name: 'id', type: 'uuid', nullable: false, description: '订单唯一标识' },
            { name: 'order_number', type: 'text', nullable: false, description: '订单号' },
            { name: 'user_id', type: 'uuid', nullable: false, description: '用户ID' },
            { name: 'total_amount', type: 'numeric', nullable: false, description: '订单总金额' },
            { name: 'status', type: 'text', nullable: false, description: '订单状态: pending/processing/shipped/delivered/cancelled' },
            { name: 'shipping_address', type: 'text', nullable: true, description: '收货地址' },
            { name: 'tracking_number', type: 'text', nullable: true, description: '物流单号' },
            { name: 'shipped_at', type: 'timestamp', nullable: true, description: '发货时间' },
            { name: 'notes', type: 'text', nullable: true, description: '订单备注' },
          ],
          policies: ['用户只能查看自己的订单', '管理员可以查看和管理所有订单'],
          sampleData: currentData?.orders?.slice(0, 3),
        },
        {
          name: 'profiles',
          description: '用户信息表 - 存储用户资料',
          columns: [
            { name: 'id', type: 'uuid', nullable: false, description: '用户资料ID' },
            { name: 'user_id', type: 'uuid', nullable: false, description: '用户账号ID' },
            { name: 'display_name', type: 'text', nullable: true, description: '显示名称' },
            { name: 'email', type: 'text', nullable: true, description: '邮箱地址（从auth获取）' },
            { name: 'role', type: 'text', nullable: true, description: '用户角色: user/admin' },
            { name: 'phone', type: 'text', nullable: true, description: '手机号码' },
            { name: 'avatar_url', type: 'text', nullable: true, description: '头像URL' },
            { name: 'last_login', type: 'timestamp', nullable: true, description: '最后登录时间' },
          ],
          policies: ['用户可以查看和修改自己的信息', '管理员可以查看所有用户信息'],
          sampleData: currentData?.users?.slice(0, 3),
        },
        {
          name: 'after_sales_requests',
          description: '售后服务表 - 存储售后申请',
          columns: [
            { name: 'id', type: 'uuid', nullable: false, description: '售后ID' },
            { name: 'order_id', type: 'uuid', nullable: false, description: '关联订单ID' },
            { name: 'product_id', type: 'uuid', nullable: false, description: '关联商品ID' },
            { name: 'user_id', type: 'uuid', nullable: false, description: '用户ID' },
            { name: 'type', type: 'text', nullable: false, description: '售后类型: refund/exchange/repair' },
            { name: 'reason', type: 'text', nullable: false, description: '售后原因' },
            { name: 'status', type: 'text', nullable: false, description: '处理状态: pending/approved/rejected/processing/completed' },
            { name: 'refund_amount', type: 'numeric', nullable: true, description: '退款金额' },
            { name: 'admin_notes', type: 'text', nullable: true, description: '管理员备注' },
          ],
          policies: ['用户可以创建和查看自己的售后申请', '管理员可以处理所有售后申请'],
          sampleData: currentData?.afterSales?.slice(0, 3),
        },
        {
          name: 'brands',
          description: '品牌信息表 - 存储所有品牌数据',
          columns: [
            { name: 'id', type: 'uuid', nullable: false, description: '品牌唯一标识' },
            { name: 'name', type: 'text', nullable: false, description: '品牌名称' },
            { name: 'description', type: 'text', nullable: true, description: '品牌描述' },
            { name: 'logo_url', type: 'text', nullable: true, description: '品牌LOGO' },
            { name: 'is_active', type: 'boolean', nullable: false, description: '是否启用' },
            { name: 'display_order', type: 'integer', nullable: true, description: '显示顺序' },
          ],
          policies: ['管理员可以管理品牌', '所有人可以查看品牌'],
          sampleData: currentData?.brands?.slice(0, 5),
        },
        {
          name: 'categories',
          description: '分类信息表 - 存储商品分类（支持二级分类）',
          columns: [
            { name: 'id', type: 'uuid', nullable: false, description: '分类唯一标识' },
            { name: 'name', type: 'text', nullable: false, description: '分类名称' },
            { name: 'description', type: 'text', nullable: true, description: '分类描述' },
            { name: 'parent_id', type: 'uuid', nullable: true, description: '父分类ID（为null表示一级分类）' },
            { name: 'is_active', type: 'boolean', nullable: false, description: '是否启用' },
            { name: 'display_order', type: 'integer', nullable: true, description: '显示顺序' },
          ],
          policies: ['管理员可以管理分类', '所有人可以查看分类'],
          sampleData: currentData?.categories?.slice(0, 5),
        },
        {
          name: 'category_brands',
          description: '分类品牌关联表 - 存储分类和品牌的关联关系',
          columns: [
            { name: 'id', type: 'uuid', nullable: false, description: '关联唯一标识' },
            { name: 'category_id', type: 'uuid', nullable: false, description: '分类ID' },
            { name: 'brand_id', type: 'uuid', nullable: false, description: '品牌ID' },
          ],
          policies: ['管理员可以管理分类品牌关联', '所有人可以查看关联'],
        },
      ],
      
      relationships: [
        { from: 'orders.user_id', to: 'profiles.user_id', type: 'many-to-one', description: '订单属于用户' },
        { from: 'order_items.order_id', to: 'orders.id', type: 'many-to-one', description: '订单项属于订单' },
        { from: 'order_items.product_id', to: 'products.id', type: 'many-to-one', description: '订单项关联商品' },
        { from: 'after_sales_requests.order_id', to: 'orders.id', type: 'many-to-one', description: '售后关联订单' },
        { from: 'after_sales_requests.product_id', to: 'products.id', type: 'many-to-one', description: '售后关联商品' },
        { from: 'products.brand', to: 'brands.name', type: 'many-to-one', description: '商品属于品牌（通过品牌名称关联）' },
        { from: 'products.category', to: 'categories.name', type: 'many-to-one', description: '商品属于分类（通过分类名称关联）' },
        { from: 'categories.parent_id', to: 'categories.id', type: 'many-to-one', description: '分类可以有父分类（二级分类）' },
        { from: 'category_brands.category_id', to: 'categories.id', type: 'many-to-one', description: '分类品牌关联表关联分类' },
        { from: 'category_brands.brand_id', to: 'brands.id', type: 'many-to-one', description: '分类品牌关联表关联品牌' },
      ],
      
      enums: [
        { 
          name: 'order_status', 
          values: ['pending', 'processing', 'shipped', 'delivered', 'cancelled'],
          description: '订单状态枚举'
        },
        { 
          name: 'after_sales_type', 
          values: ['refund', 'exchange', 'repair'],
          description: '售后类型枚举'
        },
        { 
          name: 'after_sales_status', 
          values: ['pending', 'approved', 'rejected', 'processing', 'completed'],
          description: '售后状态枚举'
        },
        { 
          name: 'user_role', 
          values: ['user', 'admin'],
          description: '用户角色枚举'
        },
      ],
    },
    
    businessRules: {
      orderWorkflow: [
        '1. 用户下单 -> 订单状态为 pending',
        '2. 管理员确认 -> 订单状态变更为 processing',
        '3. 商品发货 -> 订单状态变更为 shipped，记录物流单号和发货时间',
        '4. 用户确认收货 -> 订单状态变更为 delivered',
        '5. 取消订单 -> 订单状态变更为 cancelled（只能在 pending/processing 状态取消）',
        '注意：发货时必须填写物流单号，库存会自动扣减',
      ],
      
      productManagement: [
        '1. 商品上架：设置 is_active = true',
        '2. 商品下架：设置 is_active = false',
        '3. 设为热销：设置 is_hot = true',
        '4. 设为推荐：设置 is_recommended = true',
        '5. 库存管理：修改 stock_quantity，库存不足时应提醒',
        '6. 价格调整：修改 price，建议记录历史价格',
        '7. 品牌关联：商品的 brand 字段关联 brands 表的 name 字段',
        '8. 分类关联：商品的 category 字段关联 categories 表的 name 字段',
        '9. 搜索品牌商品：通过 brands 表查询品牌信息，然后使用品牌名称在 products 表中查询',
        '10. 搜索分类商品：通过 categories 表查询分类信息，然后使用分类名称在 products 表中查询',
        '注意：下架商品不影响已有订单，品牌和分类名称必须精确匹配',
      ],
      
      userManagement: [
        '1. 用户注册自动创建 profiles 记录，默认角色为 user',
        '2. 管理员可以修改用户角色（user/admin）',
        '3. 管理员可以查看所有用户的订单和售后记录',
        '4. 用户信息包含：显示名称、邮箱、手机、头像',
        '注意：删除用户需要谨慎，关联数据较多',
      ],
      
      afterSales: [
        '1. 用户提交售后申请 -> 状态为 pending',
        '2. 管理员审核通过 -> 状态变更为 approved',
        '3. 管理员审核拒绝 -> 状态变更为 rejected',
        '4. 开始处理 -> 状态变更为 processing',
        '5. 完成处理 -> 状态变更为 completed',
        '注意：退款类型需要设置 refund_amount，退款后需要更新订单状态',
      ],
    },
    
    capabilities: [
      {
        name: 'query_brands',
        type: 'query',
        description: '查询品牌信息，获取所有品牌列表或特定品牌详情',
        parameters: [
          { name: 'brand_name', type: 'string', required: false, description: '品牌名称（模糊搜索）' },
          { name: 'is_active', type: 'boolean', required: false, description: '是否启用' },
        ],
        examples: [
          '查询所有品牌',
          '查找品牌名称包含"Apple"的品牌',
          '获取所有启用的品牌列表',
        ],
      },
      {
        name: 'query_categories',
        type: 'query',
        description: '查询分类信息，支持查询一级分类和二级分类',
        parameters: [
          { name: 'parent_id', type: 'string', required: false, description: '父分类ID（null表示查询一级分类）' },
          { name: 'is_active', type: 'boolean', required: false, description: '是否启用' },
        ],
        examples: [
          '查询所有一级分类',
          '查询某个一级分类下的所有二级分类',
          '获取所有启用的分类',
        ],
      },
      {
        name: 'query_products_by_brand',
        type: 'query',
        description: '通过品牌查询该品牌下的所有商品',
        parameters: [
          { name: 'brand', type: 'string', required: true, description: '品牌名称（精确匹配）' },
          { name: 'is_active', type: 'boolean', required: false, description: '是否仅查询上架商品' },
        ],
        examples: [
          '查询Apple品牌下的所有商品',
          '找出华为品牌下所有上架的商品',
          '统计小米品牌商品的总库存',
        ],
      },
      {
        name: 'query_products_by_category',
        type: 'query',
        description: '通过分类查询该分类下的所有商品',
        parameters: [
          { name: 'category', type: 'string', required: true, description: '分类名称（精确匹配）' },
          { name: 'is_active', type: 'boolean', required: false, description: '是否仅查询上架商品' },
        ],
        examples: [
          '查询电子产品分类下的所有商品',
          '找出手机分类下所有上架的商品',
          '统计服装分类商品的平均价格',
        ],
      },
      {
        name: 'query_products',
        type: 'query',
        description: '查询商品信息，支持按分类、品牌、价格范围、状态筛选',
        parameters: [
          { name: 'category', type: 'string', required: false, description: '商品分类' },
          { name: 'brand', type: 'string', required: false, description: '商品品牌' },
          { name: 'min_price', type: 'number', required: false, description: '最低价格' },
          { name: 'max_price', type: 'number', required: false, description: '最高价格' },
          { name: 'is_active', type: 'boolean', required: false, description: '是否上架' },
        ],
        examples: [
          '查询所有上架的电子产品',
          '找出价格在100-500元之间的商品',
          '查看库存不足10件的商品',
        ],
      },
      {
        name: 'update_product',
        type: 'mutation',
        description: '更新商品信息，包括价格、库存、状态等',
        parameters: [
          { name: 'product_id', type: 'string', required: true, description: '商品ID' },
          { name: 'updates', type: 'object', required: true, description: '要更新的字段' },
        ],
        examples: [
          '将商品价格降低10%',
          '给商品ID为xxx的商品补充库存100件',
          '下架所有库存为0的商品',
        ],
      },
      {
        name: 'query_orders',
        type: 'query',
        description: '查询订单信息，支持按状态、时间范围、用户筛选',
        parameters: [
          { name: 'status', type: 'string', required: false, description: '订单状态' },
          { name: 'user_id', type: 'string', required: false, description: '用户ID' },
          { name: 'start_date', type: 'string', required: false, description: '开始日期' },
          { name: 'end_date', type: 'string', required: false, description: '结束日期' },
        ],
        examples: [
          '查询今天的所有待发货订单',
          '统计本月的订单总金额',
          '找出超过3天未发货的订单',
        ],
      },
      {
        name: 'update_order_status',
        type: 'mutation',
        description: '更新订单状态和物流信息',
        parameters: [
          { name: 'order_id', type: 'string', required: true, description: '订单ID' },
          { name: 'status', type: 'string', required: true, description: '新状态' },
          { name: 'tracking_number', type: 'string', required: false, description: '物流单号' },
          { name: 'notes', type: 'string', required: false, description: '备注' },
        ],
        examples: [
          '将订单标记为已发货并填写物流单号',
          '批量处理所有待处理的订单',
          '取消超过7天未支付的订单',
        ],
      },
      {
        name: 'analyze_data',
        type: 'analysis',
        description: '分析业务数据，生成报表和洞察',
        parameters: [
          { name: 'analysis_type', type: 'string', required: true, description: '分析类型：sales/inventory/users/trends' },
          { name: 'time_range', type: 'string', required: false, description: '时间范围' },
        ],
        examples: [
          '分析本月的销售趋势',
          '找出最畅销的商品类别',
          '统计用户增长情况',
          '预测下周可能缺货的商品',
        ],
      },
      {
        name: 'handle_after_sales',
        type: 'mutation',
        description: '处理售后申请',
        parameters: [
          { name: 'request_id', type: 'string', required: true, description: '售后申请ID' },
          { name: 'action', type: 'string', required: true, description: '操作：approve/reject/complete' },
          { name: 'refund_amount', type: 'number', required: false, description: '退款金额' },
          { name: 'admin_notes', type: 'string', required: false, description: '管理员备注' },
        ],
        examples: [
          '批准退款申请并设置退款金额',
          '拒绝不合理的售后申请',
          '完成换货处理',
        ],
      },
      // 导航和创建操作
      {
        name: 'navigate',
        type: 'navigation',
        description: '导航到指定的管理页面',
        parameters: [
          { name: 'tab', type: 'string', required: true, description: '目标页面：home/overview/products/categories/brands/banners/coupons/orders/users/aftersales/marketing/transactions' },
        ],
        examples: [
          '打开商品管理页面',
          '跳转到订单列表',
          '进入用户管理',
          '查看优惠券管理',
        ],
      },
      {
        name: 'create_product',
        type: 'creation',
        description: '创建新商品',
        parameters: [
          { name: 'name', type: 'string', required: true, description: '商品名称' },
          { name: 'price', type: 'number', required: true, description: '商品价格' },
          { name: 'brand', type: 'string', required: false, description: '品牌名称' },
          { name: 'category', type: 'string', required: false, description: '分类名称' },
          { name: 'description', type: 'string', required: false, description: '商品描述' },
          { name: 'stock_quantity', type: 'number', required: false, description: '初始库存' },
        ],
        examples: [
          '创建一个新商品叫iPhone 15 Pro，价格8999元',
          '添加一个华为手机，定价4999元，库存100台',
          '新建一个电子产品分类的商品',
        ],
      },
      {
        name: 'create_coupon',
        type: 'creation',
        description: '创建新优惠券',
        parameters: [
          { name: 'name', type: 'string', required: true, description: '优惠券名称' },
          { name: 'type', type: 'string', required: true, description: '类型：percentage(百分比)/fixed(固定金额)' },
          { name: 'discount_value', type: 'number', required: true, description: '优惠值（百分比或固定金额）' },
          { name: 'min_purchase_amount', type: 'number', required: false, description: '最低消费金额' },
          { name: 'total_quantity', type: 'number', required: false, description: '发放数量' },
        ],
        examples: [
          '创建一个9折优惠券',
          '做一个满100减20的活动',
          '发放500张新人优惠券，每张优惠10元',
        ],
      },
      {
        name: 'create_banner',
        type: 'creation',
        description: '创建新的广告横幅',
        parameters: [
          { name: 'title', type: 'string', required: true, description: 'Banner标题' },
          { name: 'subtitle', type: 'string', required: false, description: '副标题' },
          { name: 'link_url', type: 'string', required: false, description: '跳转链接' },
        ],
        examples: [
          '创建一个促销Banner',
          '添加一个新品上市的广告',
          '创建双十一活动横幅',
        ],
      },
      {
        name: 'create_category',
        type: 'creation',
        description: '创建新的商品分类',
        parameters: [
          { name: 'name', type: 'string', required: true, description: '分类名称' },
          { name: 'description', type: 'string', required: false, description: '分类描述' },
          { name: 'parent_id', type: 'string', required: false, description: '父分类ID（创建二级分类时使用）' },
        ],
        examples: [
          '创建一个手机配件分类',
          '在电子产品下添加一个耳机子分类',
          '新建一个服装分类',
        ],
      },
      {
        name: 'create_brand',
        type: 'creation',
        description: '创建新的品牌',
        parameters: [
          { name: 'name', type: 'string', required: true, description: '品牌名称' },
          { name: 'description', type: 'string', required: false, description: '品牌描述' },
        ],
        examples: [
          '添加一个新品牌叫小米',
          '创建OPPO品牌',
          '新增一个三星品牌',
        ],
      },
    ],
  };
};

/**
 * 生成给AI的系统提示词
 */
export const generateSystemPrompt = (schema: SystemSchema, statistics?: any): string => {
  return `# 智能电商管理系统 AI 助手

## 你的身份
你是一个专业的电商运营AI助手，拥有完整的系统访问权限。你可以：
- 深度理解系统的数据结构和业务规则
- 主动分析数据并发现问题
- 执行各种管理操作
- 提供专业的运营建议

## 当前系统状态
${statistics ? `
- 总商品数：${statistics.totalProducts || 0} 件（上架：${statistics.activeProducts || 0}，库存不足：${statistics.lowStock || 0}）
- 总订单数：${statistics.totalOrders || 0} 个（待处理：${statistics.pendingOrders || 0}，已发货：${statistics.shippedOrders || 0}）
- 总用户数：${statistics.totalUsers || 0} 人（管理员：${statistics.adminUsers || 0}）
- 售后申请：${statistics.totalAfterSales || 0} 个（待处理：${statistics.pendingAfterSales || 0}）
- 今日订单：${statistics.todayOrders || 0} 个，总金额：¥${statistics.todayRevenue || 0}
` : ''}

## 数据模型
${JSON.stringify(schema.database, null, 2)}

## 业务规则
${Object.entries(schema.businessRules).map(([key, rules]) => `
### ${key}
${(rules as string[]).map((rule, i) => `${i + 1}. ${rule}`).join('\n')}
`).join('\n')}

## 你的能力
${schema.capabilities.map(cap => `
### ${cap.name} (${cap.type})
${cap.description}
参数：${cap.parameters.map(p => `${p.name}${p.required ? '*' : ''}: ${p.type} - ${p.description}`).join(', ')}
示例：${cap.examples.join(' | ')}
`).join('\n')}

## 操作指南
1. **理解意图**：仔细分析用户的问题，判断需要查询、创建还是导航
2. **数据分析**：基于当前系统数据，主动发现问题和机会
3. **执行操作**：通过 metadata.actions 返回具体的操作指令
4. **专业建议**：提供数据驱动的运营建议

## 操作格式
当需要执行操作时，在返回的 metadata 中包含 actions 数组：
\`\`\`json
{
  "actions": [
    {
      "type": "navigate | create_product | create_coupon | create_banner | create_category | create_brand | update_product | update_order | update_user | query_data | notification | analysis | batch_update",
      "params": { /* 具体参数 */ },
      "description": "操作说明",
      "reasoning": "为什么执行这个操作"
    }
  ]
}
\`\`\`

## 支持的操作类型
- **navigate**: 导航到指定页面，params: { tab: "products|orders|users|coupons|banners|categories|brands|..." }
- **create_product**: 创建商品，params: { name, price, brand?, category?, description?, stock_quantity? }
- **create_coupon**: 创建优惠券，params: { name, type: "percentage|fixed", discount_value, min_purchase_amount?, total_quantity? }
- **create_banner**: 创建Banner，params: { title, subtitle?, link_url? }
- **create_category**: 创建分类，params: { name, description?, parent_id? }
- **create_brand**: 创建品牌，params: { name, description? }
- **update_product**: 更新商品，params: { product_id, price?, stock?, is_active?, is_hot?, is_recommended? }
- **update_order**: 更新订单，params: { order_id, status, tracking_number? }
- **update_user**: 更新用户，params: { user_id, role }
- **batch_update**: 批量更新，params: { table, items: [{ id, updates }] }

## 注意事项
- 始终基于实际数据进行分析和建议
- 当用户要求创建内容时，立即执行create_*操作
- 当用户要求查看或管理某个模块时，执行navigate操作
- 执行操作前要考虑业务规则
- 提供清晰的操作说明和原因
- 关注异常情况（如库存不足、超时订单等）
- 保持专业、准确、高效的服务态度
`;
};
