// Shared types, constants and helpers for FleetFlow.
// NOTE: All live data now comes from Supabase via FleetDataContext.
// These interfaces match the database column names (camelCase / quoted).

export type LoadStatus =
  | 'Available'
  | 'Assigned'
  | 'In Transit'
  | 'Delivered'
  | 'Invoiced';

export interface Load {
  id: string;
  loadNumber: string;
  broker: string;
  pickup: string;
  delivery: string;
  pickupDate: string;
  deliveryDate: string;
  weight: number;
  commodity: string;
  rate: number;
  miles: number;
  deadhead: number;
  status: LoadStatus;
  driver: string | null;
  truck: string | null;
}

export interface Driver {
  id: string;
  name: string;
  cdl: string;
  phone: string;
  email: string;
  status: 'Available' | 'On Duty' | 'Off Duty' | 'Resting';
  location: string;
  safetyScore: number;
  hoursAvailable: number;
  medicalCardExp: string;
  cdlExp: string;
  milesThisWeek: number;
  revenueThisWeek: number;
}

export interface Truck {
  id: string;
  unit: string;
  vin: string;
  make: string;
  model: string;
  year: number;
  mileage: number;
  mpg: number;
  insuranceExp: string;
  nextService: string;
  dotInspection: string;
  status: 'Active' | 'In Shop' | 'Idle';
  driver: string | null;
}

export interface Trailer {
  id: string;
  trailerNumber: string;
  type: string;
  length: string;
  status: 'Active' | 'In Shop' | 'Idle';
  lastInspection: string;
  assigned: string | null;
}

export interface Broker {
  id: string;
  name: string;
  contact: string;
  credit: 'A+' | 'A' | 'B+' | 'B';
  avgDaysToPay: number;
  loadsYTD: number;
  revenueYTD: number;
  phone?: string | null;
  notes?: string | null;
}

export interface Invoice {
  id: string;
  invoiceNumber: string;
  broker: string;
  loadNumber: string;
  amount: number;
  status: 'Draft' | 'Sent' | 'Paid' | 'Overdue';
  issuedDate: string;
  dueDate: string;
}

export const STATUS_COLUMNS: LoadStatus[] = [
  'Available',
  'Assigned',
  'In Transit',
  'Delivered',
  'Invoiced',
];

export const statusColors: Record<LoadStatus, string> = {
  Available: 'bg-slate-100 text-slate-700 border-slate-300',
  Assigned: 'bg-blue-100 text-blue-800 border-blue-300',
  'In Transit': 'bg-amber-100 text-amber-800 border-amber-300',
  Delivered: 'bg-emerald-100 text-emerald-800 border-emerald-300',
  Invoiced: 'bg-violet-100 text-violet-800 border-violet-300',
};

export const fmt = (n: number) => '$' + (n || 0).toLocaleString('en-US');
