import fileTypeTagStyles from '~/styles/components/file-type-tag.css?url';

export type FileType = 
  | 'sales-contract' 
  | 'purchase-contract' 
  | 'license' 
  | 'punishment' 
  | 'agreement' 
  | 'contract'  // 合同文档
  | 'license-doc' // 行政许可卷宗
  | 'punishment-doc' // 行政处罚卷宗
  | 'other'  // 其他
  | string;

interface FileTypeTagProps {
  type: FileType;
  text?: string;
  className?: string;
  size?: 'default' | 'sm' | 'lg';
  showIcon?: boolean;
  fileType?: string;
  colorMode?: 'light' | 'dark' | 'auto';
  typeName?: string; // 新增typeName属性，用于根据文档类型名称判断样式
}

export function links() {
  return [{ rel: "stylesheet", href: fileTypeTagStyles }];
}

/**
 * 文档类型标签组件
 * 用于显示文档的类型，如销售合同、采购合同、许可证等
 * @param type 文档类型
 * @param text 自定义文本，不提供则使用默认文本
 * @param className 额外的类名
 * @param size 尺寸：default, sm, lg
 * @param showIcon 是否显示图标，默认为true
 * @param fileType 文件类型，不提供则使用文档类型决定样式
 * @param colorMode 颜色模式：light, dark, auto(默认)，设置为auto时跟随系统
 * @param typeName 文档类型名称，用于判断样式
 */
export function FileTypeTag({ 
  type, 
  text, 
  className = '', 
  size = 'default',
  showIcon = true,
  fileType,
  colorMode = 'auto',
  typeName
}: FileTypeTagProps) {
  // 文档类型对应的图标
  const getTypeIcon = () => {
    const typeIconMap: Record<string, string> = {
      'sales-contract': 'ri-file-list-3-line',
      'purchase-contract': 'ri-shopping-cart-line',
      'license': 'ri-vip-crown-line',
      'punishment': 'ri-scales-line',
      'agreement': 'ri-file-paper-line',
      'pdf': 'ri-file-pdf-line',
      'doc': 'ri-file-word-line',
      'docx': 'ri-file-word-line',
      'xls': 'ri-file-excel-line',
      'xlsx': 'ri-file-excel-line',
      'ppt': 'ri-file-ppt-line',
      'pptx': 'ri-file-ppt-line',
      'contract': 'ri-file-list-3-line',       // 合同文档
      'license-doc': 'ri-vip-crown-line',      // 行政许可卷宗
      'punishment-doc': 'ri-scales-line',      // 行政处罚卷宗
      'other': 'ri-file-paper-line',           // 其他
    };
    return typeIconMap[type] || 'ri-file-text-line';
  };

  // 文档类型对应的文本
  const getTypeText = () => {
    // 如果提供了自定义文本，优先使用
    if (text) return text;
    
    // 如果提供了typeName，优先使用
    if (typeName) return typeName;
    
    const typeTextMap: Record<string, string> = {
      'sales-contract': '销售合同',
      'purchase-contract': '采购合同',
      'license': '专卖许可证',
      'punishment': '行政处罚决定书',
      'agreement': '承包协议',
      'pdf': 'PDF',
      'doc': 'Word',
      'docx': 'Word',
      'xls': 'Excel',
      'xlsx': 'Excel',
      'ppt': 'PPT',
      'contract': '合同文档',        // 合同文档
      'license-doc': '行政许可卷宗', // 行政许可卷宗
      'punishment-doc': '行政处罚卷宗', // 行政处罚卷宗
      'other': '其他文档',           // 其他
    };
    return typeTextMap[type] || type;
  };

  // 获取根据typeName判断的样式类名
  const getTypeNameClass = () => {
    if (!typeName) return '';
    
    // 根据typeName判断文档类型
    if (typeName.includes('合同')) {
      return 'file-type-tag-contract';
    } else if (typeName.includes('许可') || typeName.includes('行政许可')) {
      return 'file-type-tag-license-doc';
    } else if (typeName.includes('处罚') || typeName.includes('行政处罚')) {
      return 'file-type-tag-punishment-doc';
    } else {
      return 'file-type-tag-other';
    }
  };

  // 获取文档类型对应的类名
  const getTypeClass = () => {
    // 如果有typeName，根据typeName判断样式
    if (typeName) {
      const typeNameClass = getTypeNameClass();
      if (typeNameClass) {
        return `file-type-tag ${typeNameClass}`;
      }
    }
    
    // 如果有文件类型，优先使用文件类型决定样式
    if (fileType) {
      const fileTypeClass = getFileTypeClass(fileType);
      if (fileTypeClass) {
        return `file-type-tag ${fileTypeClass}`;
      }
    }
    return `file-type-tag file-type-${type}`;
  };

  // 根据文件扩展名获取对应的样式类名
  const getFileTypeClass = (ext: string) => {
    ext = ext.toLowerCase();
    if (ext === 'pdf') {
      return 'file-type-tag-pdf';
    } else if (ext === 'doc' || ext === 'docx') {
      return 'file-type-tag-doc';
    } else if (ext === 'xls' || ext === 'xlsx') {
      return 'file-type-tag-xls';
    } else if (ext === 'ppt' || ext === 'pptx') {
      return 'file-type-tag-ppt';
    } else if (ext === 'zip' || ext === 'rar') {
      return 'file-type-tag-zip';
    } else if (ext === 'jpg' || ext === 'jpeg' || ext === 'png' || ext === 'gif') {
      return 'file-type-tag-img';
    } else if (ext === 'txt') {
      return 'file-type-tag-txt';
    }
    return null;
  };

  // 获取尺寸类名
  const getSizeClass = () => {
    return size !== 'default' ? `file-type-tag-${size}` : '';
  };

  // 获取图标显示相关的类名
  const getIconClass = () => {
    return !showIcon ? 'file-type-tag-no-icon' : '';
  };

  // 获取颜色模式类名
  const getColorModeClass = () => {
    if (colorMode === 'light') return 'color-mode-light';
    if (colorMode === 'dark') return 'color-mode-dark';
    return ''; // auto模式不添加额外类名
  };

  return (
    <span className={`${getTypeClass()} ${getSizeClass()} ${getIconClass()} ${getColorModeClass()} ${className}`}>
      {showIcon && <i className={`${getTypeIcon()} file-type-icon`}></i>}
      <span className="file-type-text">{getTypeText()}</span>
    </span>
  );
} 