import { Socket } from 'socket.io'
import { Character } from '#entities/character'
import { ZoneEventTile } from '#entities/zoneEventTile'
import { ZoneEventTileTeleport } from '#entities/zoneEventTileTeleport'

export type TSocket = Socket & {
  userId?: number
  characterId?: number
  handshake?: {
    query?: {
      token?: any
    }
  }
  request?: {
    headers?: {
      cookie?: any
    }
  }
}

export type ExtendedCharacter = Character & {
  isMoving?: boolean
  resetMovement?: boolean
}

export type ZoneEventTileWithTeleport = ZoneEventTile & {
  teleport: ZoneEventTileTeleport
}

export type AssetData = {
  key: string
  data: string
  group: 'tiles' | 'objects' | 'sprites' | 'sprite_animations' | 'sound' | 'music' | 'ui' | 'font' | 'other'
  updatedAt: Date
  originX?: number
  originY?: number
  isAnimated?: boolean
  frameCount?: number
  frameWidth?: number
  frameHeight?: number
  frameRate?: number
}

export type WorldSettings = {
  date: Date
  isRainEnabled: boolean
  isFogEnabled: boolean
  fogDensity: number
}

// export type TCharacter = Socket & {
//   user?: User
//   character?: Character
// }