'use client';

import { useAppI18n } from '@/lib/i18n/provider';
import { Badge } from '@/components/ui/badge';
import { cn } from '@/lib/utils';
import type { TaskRuntimeStatus } from '@/lib/task-runtime';
import { taskRuntimeStatusLabel } from '@/lib/task-runtime';

export function TaskRuntimeStatusBadge({
  status,
  className,
}: {
  status: TaskRuntimeStatus;
  className?: string;
}) {
  const { locale } = useAppI18n();

  return (
    <Badge
      variant="outline"
      className={cn(
        'border text-[11px]',
        status === 'done' && 'border-[#B7C2B5] bg-[#E3E8E2] text-[#657162]',
        status === 'running' && 'border-[#BCC4CE] bg-[#E4E7EB] text-[#697281]',
        status === 'waiting' && 'border-[#B8AEA8] bg-[#E7E2DE] text-[#5F5550]',
        status === 'blocked' && 'border-[#B8AEA8] bg-[#E7E2DE] text-[#5F5550]',
        status === 'queued' && 'border-[#D8D2CE] bg-[#ECE8E5] text-[#4F4642]',
        status === 'error' && 'border-[#B8AEA8] bg-[#E7E2DE] text-[#342E2B]',
        status === 'cancelled' && 'border-[#D8D2CE] bg-[#ECE8E5] text-[#6A5E58]',
        className
      )}
    >
      {taskRuntimeStatusLabel(status, locale)}
    </Badge>
  );
}

export function formatTaskRuntimeTime(value?: string | null, locale: string = 'zh-CN'): string {
  if (!value) return '-';
  const date = new Date(value);
  if (Number.isNaN(date.getTime())) return value;
  return new Intl.DateTimeFormat(locale, {
    month: '2-digit',
    day: '2-digit',
    hour: '2-digit',
    minute: '2-digit',
  }).format(date);
}

export function formatTaskRuntimeDuration(durationMs: number | null, locale: string = 'zh-CN'): string {
  if (durationMs === null || durationMs < 0) return '-';
  if (durationMs < 1000) return locale === 'en-US' ? '<1s' : '<1秒';

  const seconds = Math.floor(durationMs / 1000);
  const hours = Math.floor(seconds / 3600);
  const minutes = Math.floor((seconds % 3600) / 60);
  const remainingSeconds = seconds % 60;

  if (hours > 0) return locale === 'en-US' ? `${hours}h ${minutes}m` : `${hours}小时 ${minutes}分`;
  if (minutes > 0) return locale === 'en-US' ? `${minutes}m ${remainingSeconds}s` : `${minutes}分 ${remainingSeconds}秒`;
  return locale === 'en-US' ? `${remainingSeconds}s` : `${remainingSeconds}秒`;
}

export function progressPercent(value: number | null, max: number | null): number {
  if (value === null || max === null || max <= 0) return 0;
  return Math.max(0, Math.min(100, Math.round((value / max) * 100)));
}
