export type TJurisdiction = 'de' | 'eu' | 'us';

export type TLawSource =
  | 'gesetze-im-internet'
  | 'eur-lex'
  | 'law-cornell-lii'
  | 'govinfo-plaw'
  | 'govinfo-uscode';

export type TRawLawFormat = 'xml' | 'html' | 'text' | 'json';

export type TUsLawCollection = 'PLAW' | 'USCODE';

export interface ILawServiceConfig {
  dbFolderPath?: string;
  dbName?: string;
  govInfoApiKey?: string;
}

export interface ILawLookupRequest {
  jurisdiction: TJurisdiction;
  identifier: string;
  language?: string;
  usCollection?: TUsLawCollection;
  forceSync?: boolean;
}

export interface ILawSyncRequest {
  jurisdiction: TJurisdiction;
  limit?: number;
  offset?: number;
  language?: string;
  govInfoApiKey?: string;
  usCollection?: TUsLawCollection;
  since?: Date;
}

export interface ILawSearchRequest {
  query: string;
  jurisdiction?: TJurisdiction;
  limit?: number;
}

export interface ILawSyncResult {
  jurisdiction: TJurisdiction;
  syncedCount: number;
  identifiers: string[];
}
