/**
 * 品牌数据模型
 * 作者: 阿瑞
 * 功能: 提供品牌相关的数据访问方法
 * 版本: 2.0
 */

import { NextRequest, NextResponse } from 'next/server';
import { connectTeamDB, RequestWithDB } from '@/lib/db';
import { IBrand, IBrandListItem } from './types/IBrand';

/**
 * 创建带有团队ID的请求对象
 * @param teamId 团队ID
 * @returns 包含团队ID的NextRequest对象
 */
const createTeamRequest = (teamId: number | string): NextRequest => {
  // 创建一个URL对象，用于构建请求
  const url = new URL('http://localhost');
  url.searchParams.append('teamId', String(teamId));
  
  // 创建请求对象
  return new NextRequest(url, {
    headers: {
      'x-team-id': String(teamId)
    }
  });
};

/**
 * 品牌模型
 * 提供品牌相关数据操作函数
 */
export class BrandModel {
  /**
   * 获取品牌列表
   * @param teamId 团队ID
   * @returns 品牌列表
   */
  static async getBrands(teamId: number | string): Promise<IBrandListItem[]> {
    try {
      // 创建一个包含团队信息的请求对象
      const req = createTeamRequest(teamId);
      
      // 定义处理程序
      const handler = async (req: RequestWithDB) => {
        const [rows] = await req.db.query(
          `SELECT id, \`order\`, name 
           FROM brands 
           ORDER BY \`order\` ASC, name ASC`
        );
        
        // 转换为纯JavaScript对象
        const brands = JSON.parse(JSON.stringify(rows));
        
        return NextResponse.json({
          success: true,
          data: brands
        });
      };
      
      // 使用新版的connectTeamDB直接连接到团队数据库
      const response = await connectTeamDB(handler)(req);
      
      const result = await response.json();
      
      return result.success ? (result.data as IBrandListItem[] || []) : [];
    } catch (error) {
      console.error('获取品牌列表失败:', error);
      return [];
    }
  }

  /**
   * 根据ID获取品牌详情
   * @param teamId 团队ID
   * @param brandId 品牌ID
   * @returns 品牌详情或null
   */
  static async getBrandById(
    teamId: number | string,
    brandId: number | string
  ): Promise<IBrand | null> {
    try {
      // 创建一个包含团队信息的请求对象
      const req = createTeamRequest(teamId);
      
      // 定义处理程序
      const handler = async (req: RequestWithDB) => {
        const [rows] = await req.db.query(
          `SELECT * FROM brands WHERE id = ?`,
          [brandId]
        );
        
        // 转换为纯JavaScript对象
        const brands = JSON.parse(JSON.stringify(rows));
        
        return NextResponse.json({
          success: true,
          data: brands.length > 0 ? brands[0] : null
        });
      };
      
      // 使用新版的connectTeamDB直接连接到团队数据库
      const response = await connectTeamDB(handler)(req);
      
      const result = await response.json();
      
      return result.success ? (result.data as IBrand) : null;
    } catch (error) {
      console.error(`获取品牌(ID: ${brandId})失败:`, error);
      return null;
    }
  }
}