/**
 * Type definitions for Muve Bikesharing API
 */

export interface MuvePlatformResponse {
  success: boolean
  platform: MuvePlatform
}

export interface MuvePlatform {
  id: string
  mvreports_id: string
  name: string
  city: string
  address: string
  country: string
  phone: string
  logo: string
  mandatory_registration_fields: string | null
  android_version: string
  ios_version: string
  force_app_update: string
  terms_url: string
  privacy_url: string
  contacts_url: string | null
  has_cards_module: string
  has_payments_module: string
  default_lat: string
  default_lon: string
  stripe: MuveStripe | null
  num_users: string
  num_bikes: string
  stations: MuveStation[]
  docks: MuveDock[]
  bikes: MuveBike[]
}

export interface MuveStripe {
  platform_id: string
  stripe_publishable_key: string
  stripe_secret_key: string
  stripe_test_publishable_key: string
  stripe_test_secret_key: string
  scope: string
  livemode: string
  stripe_user_id: string
  refresh_token: string
  access_token: string
  created_on: string
}

export interface MuveStation {
  id: string
  name: string
  internal_id: string
  mvreports_id: string
  address: string
  photo_url: string | null
  description: string | null
  lat: string
  lon: string
  platform_id: string
  mac_address: string | null
  status: 'locked' | 'unlocked'
  debug_mode: string
  auto_add_bikes: string
  protocol: string
  order_number: string
  min_free_docks: string
  max_free_docks: string
  use_mqtt: string
  active: '0' | '1'
  last_communication: string
  waiting_for_configuration: string
  serial_port: string
  created_on: string
  updated_on: string
}

export interface MuveDock {
  id: string
  mvreports_id: string
  name: string
  station_name: string
}

export interface MuveDockExtended extends MuveDock {
  internal_id: string
  serial_number: string
  station_id: string
  locked: string
  previous_status: string
  schedule_status: string
  manual_status: string
  has_bike: string
  docked_bike_id: string | null
  order_number: string
  last_communication: string | null
  active: string
  created_on: string
}

export interface MuveBikesResponse {
  success: boolean
  bikes: MuveBike[]
}

export interface MuveStationsResponse {
  success: boolean
  data: MuveStation[]
  bikes: MuveBike[]
}

export interface MuveDocksResponse {
  success: boolean
  data: MuveDockExtended[]
}

export interface MuveBike {
  id: string
  internal_id: string
  gps_id: string
  received_gps_id: string | null
  mvreports_id: string
  name: string
  friendly_name: string
  battery: string
  battery_sn: string
  total_km: string
  lat: string
  lon: string
  type: 'conventional' | 'electric' | 'cargo'
  current_station: string | null
  docked: '0' | '1'
  is_dockless: string
  status: 'operational' | 'maintenance' | 'disabled'
  dock_status: string
  request_extra_data: string
  battery_enable: string
  buzzer_enable: string
  lcd_max_level: string
  lcd_level: string
  powermax_level_1: string
  powermax_level_2: string
  powermax_level_3: string
  powermax_level_4: string
  powermax_level_5: string
  platform_id: string
  run_status: string
  last_communication: string | null
  last_configuration_request: string | null
  active: '0' | '1'
  created_on: string
}
