import {
  CheckCircle2, CalendarClock, AlertCircle, RefreshCw, XCircle, TrendingUp
} from "lucide-react";
import { normalizeMeetingStatus } from "@/lib/utils";
import type { Meeting } from "@/types";
import type { ListMeetingItem } from "@/types/api";

export function mapItem(item: ListMeetingItem): Meeting {
  const rd   = item.recording_details;
  const date = item.scheduled_at ?? rd?.started_at ?? item.recall_join_at ?? item.created_at;
  return {
    id: String(item.meeting_id ?? item.recurring_candidate_id ?? item.candidate_id ?? ""),
    title: typeof item.title === "string" && item.title.trim() ? item.title : "Untitled meeting",
    meetLink: item.meet_link,
    status: normalizeMeetingStatus(item.status),
    rawStatus: item.status,
    platform: item.platform,
    participantNames: item.participants_details?.names ?? [],
    date,
    duration: rd?.duration_seconds ?? 0,
    participants: [],
    transcript: [],
    appToggleEnabled: item.app_toggle_enabled ?? undefined,
    recurringCandidateId: item.recurring_candidate_id ?? (item.candidate_id ?? undefined),
    statusSegment: item.status_segment,
    isRecurring: item.is_recurring,
  };
}

export const SEGMENT_TO_API_STATUS: Record<string, string> = {
  active:     "bot.in_call_recording,bot.in_waiting_room,bot.in_call_not_recording,bot.joining_call,transcript.processing,recording.done,pending,live,processing",
  failed:     "failed,bot.fatal,abort,not_admitted,too_short,recording.failed,transcript.failed",
  completed:  "completed,bot.done,bot.call_ended,transcript.done",
  scheduled:  "scheduled,recurring.waiting_for_app_confirmation,recurring.waiting_for_calendar_yes",
  processing: "transcript.processing,recording.done",
  abort:      "abort",
};

export const SEGMENT_CONFIG: Record<string, {
  label: string;
  icon: React.ElementType;
  emptyTitle: string;
  emptyDesc: string;
}> = {
  completed:  { label: "Completed",  icon: CheckCircle2,  emptyTitle: "No completed meetings",  emptyDesc: "Meetings with finished transcripts will appear here" },
  failed:     { label: "Failed",     icon: AlertCircle,   emptyTitle: "No failed meetings",     emptyDesc: "Meetings that encountered errors will appear here" },
  scheduled:  { label: "Scheduled",  icon: CalendarClock, emptyTitle: "No scheduled meetings",  emptyDesc: "Calendar-synced meetings will appear here" },
  processing: { label: "Processing", icon: RefreshCw,     emptyTitle: "Nothing processing",     emptyDesc: "Meetings being transcribed will appear here" },
  active:     { label: "Active",     icon: TrendingUp,    emptyTitle: "No active meetings",     emptyDesc: "Live and in-lobby meetings will appear here" },
  abort:      { label: "Aborted",    icon: XCircle,       emptyTitle: "No aborted meetings",    emptyDesc: "Cancelled meetings will appear here" },
};

export const SEGMENT_ORDER = ["completed", "scheduled", "failed", "active"];

export const PAGE_LIMIT = 12;
