// This file is auto-generated by @hey-api/openapi-ts

export type AirTemperatureData = {
  stations: Array<Station>
  readings: Array<Reading>
  readingType: string
  readingUnit: string
  paginationToken?: string | null
}

export type AirTemperatureResponse = {
  code: number
  errorMsg?: string | null
  data?: AirTemperatureData | null
}

export type AreaMetadata = {
  name: string
  label_location: LabelLocation
}

export type Body_login_login_access_token = {
  grant_type?: string | null
  username: string
  password: string
  scope?: string
  client_id?: string | null
  client_secret?: string | null
}

export type ForecastInfo = {
  code?: string | null
  text: string
}

export type ForecastItem = {
  date: string
  updatedTimestamp: string
  timestamp: string
  general: GeneralForecast
  periods?: Array<{
    [key: string]: unknown
  }> | null
}

export type ForecastPeriodGeneral = {
  start: string
  end: string
  text: string
}

export type FourDayForecastData = {
  records: Array<FourDayForecastItem>
  paginationToken?: string | null
}

export type FourDayForecastItem = {
  date: string
  updatedTimestamp: string
  timestamp: string
  forecasts: Array<{
    [key: string]: unknown
  }>
}

export type FourDayForecastResponse = {
  code: number
  errorMsg?: string | null
  data?: FourDayForecastData | null
}

export type GeneralForecast = {
  validPeriod: ForecastPeriodGeneral
  temperature: TemperatureRange
  relativeHumidity: HumidityRange
  forecast: ForecastInfo
  wind: WindInfo
}

export type HTTPValidationError = {
  detail?: Array<ValidationError>
}

export type HumidityRange = {
  low: number
  high: number
  unit: string
}

export type ItemCreate = {
  title: string
  description?: string | null
}

export type ItemPublic = {
  title: string
  description?: string | null
  id: string
  owner_id: string
}

export type ItemsPublic = {
  data: Array<ItemPublic>
  count: number
}

export type ItemUpdate = {
  title?: string | null
  description?: string | null
}

export type LabelLocation = {
  latitude: number
  longitude: number
}

export type LightningData = {
  records: Array<LightningRecord>
  paginationToken?: string | null
}

export type LightningRecord = {
  datetime: string
  item: {
    [key: string]: unknown
  }
  updated_timestamp?: string | null
}

export type LightningResponse = {
  code: number
  errorMsg?: string | null
  data?: LightningData | null
}

export type Message = {
  message: string
}

export type NewPassword = {
  token: string
  new_password: string
}

export type PrivateUserCreate = {
  email: string
  password: string
  full_name: string
  is_verified?: boolean
}

export type Reading = {
  id?: string | null
  value?: number | null
  timestamp: string
}

export type Station = {
  id: string
  deviceId?: string | null
  name: string
  location: {
    [key: string]: number
  }
}

export type TemperatureRange = {
  low: number
  high: number
  unit: string
}

export type Token = {
  access_token: string
  token_type?: string
}

export type TwentyFourHourForecastData = {
  area_metadata?: Array<AreaMetadata> | null
  records: Array<ForecastItem>
  paginationToken?: string | null
}

export type TwentyFourHourForecastResponse = {
  code: number
  errorMsg?: string | null
  data?: TwentyFourHourForecastData | null
}

export type UpdatePassword = {
  current_password: string
  new_password: string
}

export type UserCreate = {
  email: string
  is_active?: boolean
  is_superuser?: boolean
  full_name?: string | null
  password: string
}

export type UserPublic = {
  email: string
  is_active?: boolean
  is_superuser?: boolean
  full_name?: string | null
  id: string
}

export type UserRegister = {
  email: string
  password: string
  full_name?: string | null
}

export type UsersPublic = {
  data: Array<UserPublic>
  count: number
}

export type UserUpdate = {
  email?: string | null
  is_active?: boolean
  is_superuser?: boolean
  full_name?: string | null
  password?: string | null
}

export type UserUpdateMe = {
  full_name?: string | null
  email?: string | null
}

export type ValidationError = {
  loc: Array<string | number>
  msg: string
  type: string
}

export type WBGTData = {
  records: Array<WBGTRecord>
  paginationToken?: string | null
}

export type WBGTRecord = {
  datetime: string
  item: {
    [key: string]: unknown
  }
  updated_timestamp?: string | null
}

export type WBGTResponse = {
  code: number
  errorMsg?: string | null
  data?: WBGTData | null
}

export type WeatherResponse = {
  code: number
  errorMsg?: string | null
  data?: {
    [key: string]: unknown
  } | null
}

export type WindDirectionData = {
  stations: Array<Station>
  readings: Array<Reading>
  readingType: string
  readingUnit: string
  paginationToken?: string | null
}

export type WindDirectionResponse = {
  code: number
  errorMsg?: string | null
  data?: WindDirectionData | null
}

export type WindInfo = {
  speed: {
    [key: string]: unknown
  }
  direction: string
}

export type ItemsReadItemsData = {
  limit?: number
  skip?: number
}

export type ItemsReadItemsResponse = ItemsPublic

export type ItemsCreateItemData = {
  requestBody: ItemCreate
}

export type ItemsCreateItemResponse = ItemPublic

export type ItemsReadItemData = {
  id: string
}

export type ItemsReadItemResponse = ItemPublic

export type ItemsUpdateItemData = {
  id: string
  requestBody: ItemUpdate
}

export type ItemsUpdateItemResponse = ItemPublic

export type ItemsDeleteItemData = {
  id: string
}

export type ItemsDeleteItemResponse = Message

export type LoginLoginAccessTokenData = {
  formData: Body_login_login_access_token
}

export type LoginLoginAccessTokenResponse = Token

export type LoginTestTokenResponse = UserPublic

export type LoginRecoverPasswordData = {
  email: string
}

export type LoginRecoverPasswordResponse = Message

export type LoginResetPasswordData = {
  requestBody: NewPassword
}

export type LoginResetPasswordResponse = Message

export type LoginRecoverPasswordHtmlContentData = {
  email: string
}

export type LoginRecoverPasswordHtmlContentResponse = string

export type PrivateCreateUserData = {
  requestBody: PrivateUserCreate
}

export type PrivateCreateUserResponse = UserPublic

export type UsersReadUsersData = {
  limit?: number
  skip?: number
}

export type UsersReadUsersResponse = UsersPublic

export type UsersCreateUserData = {
  requestBody: UserCreate
}

export type UsersCreateUserResponse = UserPublic

export type UsersReadUserMeResponse = UserPublic

export type UsersDeleteUserMeResponse = Message

export type UsersUpdateUserMeData = {
  requestBody: UserUpdateMe
}

export type UsersUpdateUserMeResponse = UserPublic

export type UsersUpdatePasswordMeData = {
  requestBody: UpdatePassword
}

export type UsersUpdatePasswordMeResponse = Message

export type UsersRegisterUserData = {
  requestBody: UserRegister
}

export type UsersRegisterUserResponse = UserPublic

export type UsersReadUserByIdData = {
  userId: string
}

export type UsersReadUserByIdResponse = UserPublic

export type UsersUpdateUserData = {
  requestBody: UserUpdate
  userId: string
}

export type UsersUpdateUserResponse = UserPublic

export type UsersDeleteUserData = {
  userId: string
}

export type UsersDeleteUserResponse = Message

export type UtilsTestEmailData = {
  emailTo: string
}

export type UtilsTestEmailResponse = Message

export type UtilsHealthCheckResponse = boolean

export type WeatherGetTwoHourForecastData = {
  /**
   * SGT date for which to retrieve data (YYYY-MM-DD or YYYY-MM-DDTHH:MM:SS)
   */
  date?: string | null
  /**
   * Pagination token for retrieving subsequent data pages
   */
  paginationToken?: string | null
}

export type WeatherGetTwoHourForecastResponse = WeatherResponse

export type WeatherGetAirTemperatureData = {
  /**
   * Format: YYYY-MM-DD or YYYY-MM-DDTHH:MM:SS (SGT). Example: 2024-07-16 or 2024-07-16T23:59:00
   */
  date?: string | null
  /**
   * Pagination token for retrieving subsequent data pages
   */
  paginationToken?: string | null
}

export type WeatherGetAirTemperatureResponse = AirTemperatureResponse

export type WeatherGetWindDirectionData = {
  /**
   * SGT date for which to retrieve data (YYYY-MM-DD or YYYY-MM-DDTHH:MM:SS)
   */
  date?: string | null
  /**
   * Pagination token for retrieving subsequent data pages
   */
  paginationToken?: string | null
}

export type WeatherGetWindDirectionResponse = WindDirectionResponse

export type WeatherGetLightningData = {
  /**
   * SGT date (YYYY-MM-DD or YYYY-MM-DDTHH:MM:SS). Example: 2025-01-16 or 2025-01-16T23:59:00
   */
  date?: string | null
  /**
   * Pagination token for retrieving subsequent data pages
   */
  paginationToken?: string | null
}

export type WeatherGetLightningResponse = LightningResponse

export type WeatherGetWbgtData = {
  /**
   * SGT date (YYYY-MM-DD or YYYY-MM-DDTHH:MM:SS). Example: 2025-01-16 or 2025-01-16T23:59:00
   */
  date?: string | null
  /**
   * Pagination token for retrieving subsequent data pages
   */
  paginationToken?: string | null
}

export type WeatherGetWbgtResponse = WBGTResponse

export type WeatherGetTwentyFourHourForecastData = {
  /**
   * SGT date (YYYY-MM-DD or YYYY-MM-DDTHH:MM:SS). Example: 2024-07-16 or 2024-07-16T23:59:00
   */
  date?: string | null
  /**
   * Pagination token for retrieving subsequent data pages
   */
  paginationToken?: string | null
}

export type WeatherGetTwentyFourHourForecastResponse =
  TwentyFourHourForecastResponse

export type WeatherGetFourDayOutlookData = {
  /**
   * SGT date for which to retrieve data (YYYY-MM-DD or YYYY-MM-DDTHH:MM:SS)
   */
  date?: string | null
  /**
   * Pagination token for retrieving subsequent data pages
   */
  paginationToken?: string | null
}

export type WeatherGetFourDayOutlookResponse = FourDayForecastResponse
