/**
 * 映三色项目报价规则配置
 *
 * 来源: docs/data/quotation.md
 *
 * 三级报价体系:
 * - 一级报价: 老客户报价
 * - 二级报价: 中端组报价
 * - 三级报价: 高端组报价
 */

export interface QuotationRule {
  priceLevel: string;
  projectType: '家装' | '工装' | '建筑类';
  renderType?: '静态单张' | '360全景';
  spaceType?: string;
  styleLevel?: string;
  businessType?: string;
  spaceCategory?: string;
  basePrice: number;
}

/**
 * 风格分类
 */
export const STYLE_LEVELS = {
  基础风格组: ['现代', '北欧', '简约', '后现代', '工业风'],
  中级风格组: ['轻奢', '日式', '新中式'],
  高级风格组: ['简欧', '古典中式', '欧式', '美式', '简美', '轻法'],
  顶级风格组: ['古典欧式', '古典美式', '纯法式']
};

/**
 * 空间类型
 */
export const SPACE_TYPES = {
  家装: ['平层', '跃层', '挑空'],
  工装: ['门厅空间', '封闭空间', '辅助空间']
};

/**
 * 业态类型
 */
export const BUSINESS_TYPES = ['办公空间', '商业空间', '娱乐空间', '酒店餐厅', '公共空间'];

/**
 * 建筑类型
 */
export const ARCHITECTURE_TYPES = ['门头', '小型单体', '大型单体', '鸟瞰'];

/**
 * 家装区预设房间列表
 */
export const HOME_DEFAULT_ROOMS = ['客厅', '餐厅', '主卧', '次卧', '儿童房', '书房', '厨房', '卫生间', '阳台'];

/**
 * 完整报价表
 */
export const QUOTATION_PRICE_TABLE = {
  // ==================== 一级报价（老客户） ====================
  一级: {
    家装: {
      静态单张: {
        平层: {
          基础风格组: 300,
          中级风格组: 350,
          高级风格组: 400,
          顶级风格组: 500
        },
        跃层: {
          基础风格组: 400,
          中级风格组: 450,
          高级风格组: 500,
          顶级风格组: 600
        },
        挑空: {
          基础风格组: 600,
          中级风格组: 700,
          高级风格组: 800,
          顶级风格组: 900
        },
        卧室: 300
      },
      '360全景': {
        平层: {
          基础风格组: 650,
          中级风格组: 700,
          高级风格组: 750,
          顶级风格组: 850
        },
        跃层: {
          基础风格组: 700,
          中级风格组: 750,
          高级风格组: 850,
          顶级风格组: 1000
        },
        挑空: {
          基础风格组: 1100,
          中级风格组: 1200,
          高级风格组: 1300,
          顶级风格组: 1400
        },
        卧室: 400
      }
    },
    工装: {
      静态单张: {
        办公空间: { 门厅空间: 600, 封闭空间: 400 },
        商业空间: { 门厅空间: 600, 封闭空间: 500 },
        娱乐空间: { 门厅空间: 600, 封闭空间: 500 },
        酒店餐厅: { 门厅空间: 600, 封闭空间: 500 },
        公共空间: { 门厅空间: 600, 封闭空间: 600 }
      }
    },
    建筑类: {
      门头: 700,
      小型单体: 1000,
      大型单体: 1500,
      鸟瞰: 2000
    }
  },

  // ==================== 二级报价（中端组） ====================
  二级: {
    家装: {
      静态单张: {
        平层: {
          基础风格组: 400,
          中级风格组: 450,
          高级风格组: 500,
          顶级风格组: 600
        },
        跃层: {
          基础风格组: 500,
          中级风格组: 550,
          高级风格组: 600,
          顶级风格组: 700
        },
        挑空: {
          基础风格组: 700,
          中级风格组: 800,
          高级风格组: 800,
          顶级风格组: 900
        },
        卧室: 400
      },
      '360全景': {
        平层: {
          基础风格组: 800,
          中级风格组: 850,
          高级风格组: 900,
          顶级风格组: 1000
        },
        跃层: {
          基础风格组: 900,
          中级风格组: 950,
          高级风格组: 1000,
          顶级风格组: 1100
        },
        挑空: {
          基础风格组: 1200,
          中级风格组: 1300,
          高级风格组: 1400,
          顶级风格组: 1500
        },
        卧室: 600
      }
    },
    工装: {
      静态单张: {
        办公空间: { 门厅空间: 700, 封闭空间: 500 },
        商业空间: { 门厅空间: 700, 封闭空间: 600 },
        娱乐空间: { 门厅空间: 700, 封闭空间: 600 },
        酒店餐厅: { 门厅空间: 700, 封闭空间: 600 },
        公共空间: { 门厅空间: 700, 封闭空间: 700 }
      }
    },
    建筑类: {
      门头: 800,
      小型单体: 1100,
      大型单体: 1600,
      鸟瞰: 2100
    }
  },

  // ==================== 三级报价（高端组） ====================
  三级: {
    家装: {
      静态单张: {
        平层: {
          基础风格组: 600,
          中级风格组: 650,
          高级风格组: 700,
          顶级风格组: 800
        },
        跃层: {
          基础风格组: 700,
          中级风格组: 750,
          高级风格组: 800,
          顶级风格组: 900
        },
        挑空: {
          基础风格组: 900,
          中级风格组: 1000,
          高级风格组: 1000,
          顶级风格组: 1200
        },
        卧室: 600
      },
      '360全景': {
        平层: {
          基础风格组: 1200,
          中级风格组: 1250,
          高级风格组: 1400,
          顶级风格组: 1500
        },
        跃层: {
          基础风格组: 1300,
          中级风格组: 1400,
          高级风格组: 1500,
          顶级风格组: 1700
        },
        挑空: {
          基础风格组: 1800,
          中级风格组: 1850,
          高级风格组: 1900,
          顶级风格组: 2000
        },
        卧室: 800
      }
    },
    工装: {
      静态单张: {
        办公空间: { 门厅空间: 900, 封闭空间: 700 },
        商业空间: { 门厅空间: 900, 封闭空间: 800 },
        娱乐空间: { 门厅空间: 900, 封闭空间: 800 },
        酒店餐厅: { 门厅空间: 900, 封闭空间: 800 },
        公共空间: { 门厅空间: 900, 封闭空间: 900 }
      }
    },
    建筑类: {
      门头: 1000,
      小型单体: 1300,
      大型单体: 1800,
      鸟瞰: 2300
    }
  }
};

/**
 * 加价规则配置
 */
export const ADJUSTMENT_RULES:any = {
  // 家装加价规则
  家装: {
    extraFunction: {
      label: '功能区加价',
      amount: 100,
      description: '每增加一个功能区+100元'
    },
    complexity: {
      label: '造型复杂度',
      min: 100,
      max: 200,
      description: '立面和吊顶造型复杂：+100至200元'
    },
    design: {
      label: '设计服务',
      multiplier: 2,
      description: '需要我们设计（非提供参考图）：原价×2'
    }
  },

  // 工装加价规则
  工装: {
    extraFunction: {
      label: '功能区加价',
      amount: 400,
      description: '每增加一个功能区+400元'
    },
    complexity: {
      label: '造型复杂度',
      min: 100,
      max: 200,
      description: '立面和吊顶造型复杂：+100至200元'
    },
    design: {
      label: '设计服务',
      multiplier: 2,
      description: '需要我们设计：原价×2'
    },
    panoramic: {
      label: '全景渲染',
      multiplier: 2,
      description: '需要全景渲染：原价×2'
    }
  },

  // 建筑类加价规则
  建筑类: {
    complexity: {
      label: '造型复杂度',
      min: 100,
      max: 200,
      description: '根据造型复杂度：+100至200元'
    },
    design: {
      label: '设计服务',
      multiplier: 2,
      description: '需要我们设计：原价×2'
    }
  }
};

/**
 * 获取基础价格
 */
export function getBasePrice(
  priceLevel: string,
  projectType: '家装' | '工装' | '建筑类',
  renderType: string,
  spaceType: string,
  styleLevel?: string,
  businessType?: string,
  architectureType?: string
): number {
  try {
    const table = QUOTATION_PRICE_TABLE as any;

    if (projectType === '家装') {
      if (spaceType === '卧室') {
        return table[priceLevel]?.[projectType]?.[renderType]?.['卧室'] || 0;
      }
      return table[priceLevel]?.[projectType]?.[renderType]?.[spaceType]?.[styleLevel || ''] || 0;
    }

    if (projectType === '工装') {
      return table[priceLevel]?.[projectType]?.[renderType]?.[businessType || '']?.[spaceType] || 0;
    }

    if (projectType === '建筑类') {
      return table[priceLevel]?.[projectType]?.[architectureType || ''] || 0;
    }

    return 0;
  } catch (err) {
    console.error('获取基础价格失败:', err);
    return 0;
  }
}

/**
 * 计算最终价格（含加价规则）
 */
export function calculateFinalPrice(
  basePrice: number,
  projectType: '家装' | '工装' | '建筑类',
  adjustments: {
    extraFunction?: number; // 功能区数量
    complexity?: number; // 造型复杂度加价金额
    design?: boolean; // 是否需要设计服务
    panoramic?: boolean; // 是否全景渲染（仅工装）
  }
): number {
  let price = basePrice;
  const rules = ADJUSTMENT_RULES[projectType];

  // 功能区加价
  if (adjustments.extraFunction && rules?.extraFunction) {
    price += (rules?.extraFunction as any).amount * adjustments.extraFunction;
  }

  // 造型复杂度加价
  if (adjustments.complexity) {
    price += adjustments.complexity;
  }

  // 设计服务倍增
  if (adjustments.design && rules.design) {
    price *= (rules.design as any).multiplier;
  }

  // 全景渲染倍增（仅工装）
  if (projectType === '工装' && adjustments.panoramic && (rules as any).panoramic) {
    price *= (rules as any).panoramic.multiplier;
  }

  return price;
}

/**
 * 生成默认工序配置
 */
export function getDefaultProcesses(projectType: '家装' | '工装', finalPrice: number) {
  return {
    modeling: {
      enabled: false,
      price: 0,
      unit: '㎡',
      quantity: 0,
      description: '3D建模'
    },
    softDecor: {
      enabled: false,
      price: 0,
      unit: '㎡',
      quantity: 0,
      description: '软装设计'
    },
    rendering: {
      enabled: true,
      price: finalPrice,
      unit: '张',
      quantity: 1,
      description: '效果图渲染'
    },
    postProcess: {
      enabled: true,
      price: Math.round(finalPrice * 0.2),
      unit: '张',
      quantity: 1,
      description: '后期处理'
    }
  };
}
