interface TimelinePhoto {
  photoUrl: string;
  caption?: string;
}

interface TimelineBase {
  label: string;
  startDate: string;
  endDate: string;
  progress: number;
  status: TimelineStatus;
  photos: TimelinePhoto[];
}

interface Timeline extends TimelineBase {
  id: string;
  project: string;
  createdAt?: string;
  updatedAt?: string;
  createdBy?: {
    id: string;
    firstName: string;
    lastName: string;
  };
  updatedBy?: {
    id: string;
    firstName: string;
    lastName: string;
  };
}

interface CreateTimelineRequest extends TimelineBase {}

type UpdateTimelineRequest = Partial<TimelineBase>;

interface TimelineQueryParams {
  page?: number;
  limit?: number;
  search?: string;
  sortBy?: string;
  populate?: string;
  includeTimeStamps?: boolean;
  status?: string;
  startDate?: string;
  endDate?: string;
  year: number;
}

interface TimelineListResponse {
  results: Timeline[];
  page: number;
  limit: number;
  totalPages: number;
  totalResults: number;
}

interface GetTimelineListResponse {
  code: number;
  message: string;
  success: boolean;
  data: TimelineListResponse;
  error?: object;
}

interface GetTimelineByIdResponse {
  code: number;
  message: string;
  success: boolean;
  data: Timeline;
  error?: object;
}
