interface earthquakeTypes {
  reconnectTimes: number;
  websocketUrl: string;
  areasCsvUrl: string;
  maxScaleMin: number;
}

interface weatherTypes {
  splitCount: number;
}

interface stopsTypes {
  start: number;
  stop: number;
}

interface timeTypes {
  stopTimes: stopsTypes;
}

interface emergencyMailFullTypes {
  isEnabled: true;
  host: string;
  port: number;
  user: string;
  password: string;
  secure: boolean;
  to: string | string[];
}

interface emergencyMailMinTypes {
  isEnabled: false;
  mail: undefined;
}

interface emergencyFullTypes {
  isEnabled: true;
  mail: emergencyMailFullTypes | emergemcyMailMinTypes;
}

interface emergencyMinTypes {
  isEnabled: false;
}

interface reportTypes {
  isEnabled: boolean;
  message: string;
}

interface legalTypes {
  terms: string;
  privacy: string;
}

interface PanelFullTypes {
  isEnabled: true;
  port: number;
}

interface PanelMinTypes {
  isEnabled: false;
}

interface adminTypes {
  name: string;
  showMail: string | false;
  panel: PanelFullTypes | PanelMinTypes;
}

interface uwuzuTypes {
  apiToken: string;
  host: string;
}

export interface configTypes {
  time: timeTypes,
  earthquake: earthquakeTypes;
  weather: weatherTypes;
  miq: boolean;

  emergency: emergencyFullTypes | emergencyMinTypes;
  report: reportTypes;
  legal: legalTypes;
  admin: adminTypes;
  uwuzu: uwuzuTypes;
  debug?: true;
}
