import { Document, Types } from "mongoose";

export interface ILocationPoint {
    lat: number;
    lng: number;
    name: string;
}

export interface ICalculatedMetrics {
    distance: string;      // Formatted distance (e.g., "2445 Miles")
    mileage: string;       // Formatted mileage (e.g., "196.8 Gallons")
    gasRequired: string;   // Formatted gas required (e.g., "196.8 Gallons")
}

export interface ITrip extends Document {
    userId: Types.ObjectId;
    vehicleId: Types.ObjectId;
    name: string;
    startPoint: ILocationPoint;
    endPoint: ILocationPoint;
    scheduledDate: Date;
    lowFuelReminder: string;
    imageUrl?: string;
    calculatedDistance: number; // Distance in kilometers
    calculatedMileage: string; // MPG based on vehicle and distance
    calculatedGasRequired: string; // Gas required based on distance and vehicle MPG
    calculatedMetrics: ICalculatedMetrics; // Stored formatted metrics
    status: 'planned' | 'in-progress' | 'completed' | 'cancelled';
    startedAt?: Date | null;
    endedAt?: Date | null;
    /** Last known driver GPS while trip is live (resume camera / analytics). */
    lastLocation?: {
        lat: number;
        lng: number;
        heading?: number | null;
        accuracy?: number | null;
        recordedAt: Date;
    } | null;
    isDeleted: boolean;
    createdAt: Date;
    updatedAt: Date;
}