import {
    CheckCircle2,
    XCircle,
    Loader2,
    Clock,
    AlertCircle,
    CircleDot,
    Ban,
    StopCircle,
    type LucideIcon
} from "lucide-react";

/**
 * 格式化持续时间（毫秒）
 * @param ms 毫秒数
 * @returns 格式化后的时间字符串，如 "2分30秒" 或 "30秒"
 */
export const formatDuration = (ms?: number | null): string => {
    // 正确处理 0 值：只有 null 或 undefined 才返回 '-'
    if (ms === null || ms === undefined) return '-';
    
    const seconds = Math.floor(ms / 1000);
    const minutes = Math.floor(seconds / 60);
    const hours = Math.floor(minutes / 60);
    
    if (hours > 0) {
        return `${hours}小时${minutes % 60}分${seconds % 60}秒`;
    }
    if (minutes > 0) {
        return `${minutes}分${seconds % 60}秒`;
    }
    return `${seconds}秒`;
};

/**
 * 计算运行中节点的时长（从开始时间到现在）
 * @param startTime 开始时间字符串
 * @returns 时长（毫秒）
 */
export const calculateRunningDuration = (startTime?: string | null): number => {
    if (!startTime) return 0;
    try {
        const normalizedTimeStr = startTime.includes(' ') && !startTime.includes('T') 
            ? startTime.replace(' ', 'T') 
            : startTime;
        const start = new Date(normalizedTimeStr).getTime();
        const now = Date.now();
        return now - start;
    } catch {
        return 0;
    }
};

/**
 * 获取节点状态颜色（用于边框、背景等）
 * @param status 节点状态
 * @returns 颜色十六进制值
 */
export const getNodeStatusColor = (status: string): string => {
    switch (status) {
        case 'COMPLETED':
            return '#10b981'; // 绿色 - 已完成
        case 'FAILED':
            return '#ef4444'; // 红色 - 执行失败
        case 'RUNNING':
            return '#3b82f6'; // 蓝色 - 运行中
        case 'SUSPENDED':
            return '#f59e0b'; // 琥珀色 - 已暂停
        case 'TERMINATED':
            return '#9ca3af'; // 灰色 - 已终止
        case 'NOT_STARTED':
        default:
            return '#d1d5db'; // 浅灰色 - 未开始
    }
};

/**
 * 格式化时间字符串
 * 支持多种时间格式：
 * - ISO格式: "2025-11-02T23:18:51"
 * - 数据库格式: "2025-11-02 23:18:51"
 * - 其他标准格式
 * @param timeStr 时间字符串
 * @returns 格式化后的时间字符串，如 "12/19 14:30"
 */
export const formatTime = (timeStr?: string): string => {
    if (!timeStr) return '-';
    try {
        // 处理数据库格式的时间字符串（空格分隔）："2025-11-02 23:18:51"
        const normalizedTimeStr = timeStr.includes(' ') && !timeStr.includes('T') 
            ? timeStr.replace(' ', 'T') 
            : timeStr;
        
        const date = new Date(normalizedTimeStr);
        
        // 验证日期是否有效
        if (isNaN(date.getTime())) {
            return timeStr;
        }
        
        return date.toLocaleString('zh-CN', { 
            month: '2-digit', 
            day: '2-digit', 
            hour: '2-digit', 
            minute: '2-digit' 
        });
    } catch {
        return timeStr;
    }
};

/**
 * 获取部署状态的图标和颜色
 * @param status 部署状态
 * @returns 包含图标组件和颜色类的对象
 */
export const getStatusIcon = (status?: string): { icon: LucideIcon; color: string } => {
    switch (status) {
        case 'CREATED':
            return { icon: CircleDot, color: 'text-blue-500' };
        case 'PENDING_APPROVAL':
            return { icon: Clock, color: 'text-orange-500' };
        case 'RUNNING':
            return { icon: Loader2, color: 'text-blue-600' };
        case 'SUCCESS':
            return { icon: CheckCircle2, color: 'text-green-600' };
        case 'FAILED':
            return { icon: XCircle, color: 'text-red-600' };
        case 'PARTIAL_SUCCESS':
            return { icon: AlertCircle, color: 'text-amber-600' };
        case 'REJECTED':
            return { icon: Ban, color: 'text-red-500' };
        case 'CANCELLED':
            return { icon: Clock, color: 'text-gray-400' };
        case 'TERMINATED':
            return { icon: StopCircle, color: 'text-gray-500' };
        default:
            return { icon: Clock, color: 'text-gray-400' };
    }
};

/**
 * 获取节点状态的中文文本（NodeInstance 状态）
 * @param status 节点状态
 * @returns 状态的中文描述
 */
export const getNodeStatusText = (status?: string): string => {
    switch (status) {
        case 'NOT_STARTED':
            return '未开始';
        case 'RUNNING':
            return '运行中';
        case 'SUSPENDED':
            return '已暂停';
        case 'COMPLETED':
            return '已完成';
        case 'TERMINATED':
            return '已终止';
        case 'FAILED':
            return '执行失败';
        default:
            return '未知';
    }
};

/**
 * 获取部署状态的中文文本（DeployStatus 状态）
 * @param status 部署状态
 * @returns 状态的中文描述
 */
export const getStatusText = (status?: string): string => {
    switch (status) {
        case 'CREATED':
            return '已创建';
        case 'PENDING_APPROVAL':
            return '待审批';
        case 'RUNNING':
            return '运行中';
        case 'SUCCESS':
            return '部署成功';
        case 'FAILED':
            return '部署失败';
        case 'PARTIAL_SUCCESS':
            return '部分成功';
        case 'REJECTED':
            return '审批被拒绝';
        case 'CANCELLED':
            return '已取消';
        case 'TERMINATED':
            return '已终止';
        default:
            return '未知';
    }
};

