import type { AdminArea, DataQualityRating, DatasetStatus, DateRangeParams, Locality, PaginatedResponse, PaginationParams } from './common.js';

/**
 * Timetable dataset information
 */
export interface Timetable {
  /** Dataset ID */
  id: number;
  /** Creation timestamp */
  created: string;
  /** Last modified timestamp */
  modified: string;
  /** Operator name */
  operatorName: string;
  /** National Operator Codes */
  noc: string[];
  /** Dataset name */
  name: string;
  /** Dataset description */
  description: string;
  /** Comment about the dataset */
  comment: string;
  /** Dataset status */
  status: DatasetStatus;
  /** Download URL */
  url: string;
  /** File extension */
  extension: string;
  /** Service line numbers */
  lines: string[];
  /** First service start date */
  firstStartDate: string;
  /** First service end date */
  firstEndDate: string;
  /** Last service end date */
  lastEndDate: string;
  /** Administrative areas covered */
  adminAreas: AdminArea[];
  /** Localities covered */
  localities: Locality[];
  /** Data quality score */
  dqScore: string;
  /** Data quality rating */
  dqRag: DataQualityRating;
  /** BODS compliance status */
  bodsCompliance: boolean | null;
}

/**
 * Response structure for timetable queries
 */
export type TimetableResponse = PaginatedResponse<Timetable>;

/**
 * Parameters for searching timetables
 */
export interface TimetableSearchParams extends PaginationParams, DateRangeParams {
  /** Administrative area codes to filter by */
  adminArea?: string[];
  /** National Operator Codes to filter by */
  noc?: string[];
  /** Search text for name, description, operator, or admin area */
  search?: string;
  /** Dataset status to filter by */
  status?: DatasetStatus;
  /** Filter by end date range */
  endDateStart?: Date | string;
  endDateEnd?: Date | string;
  /** Filter by modification date */
  modifiedDate?: Date | string;
  /** Filter by start date range */
  startDateStart?: Date | string;
  startDateEnd?: Date | string;
  /** Filter by data quality rating */
  dqRag?: DataQualityRating;
  /** Filter by BODS compliance */
  bodsCompliance?: boolean;
}
