package api

// Module IDs (WsModuleId enum ordinals, derived from WsCmd.getModuleId ranges).
const (
	ModuleNone            = 0
	ModuleCameraTele      = 1
	ModuleCameraWide      = 2
	ModuleAstro           = 3
	ModuleSystem          = 4
	ModuleRGBPower        = 5
	ModuleMotor           = 6
	ModuleTrack           = 7
	ModuleFocus           = 8
	ModuleNotify          = 9
	ModulePanorama        = 10
	ModuleITips           = 11
	ModuleShootingSchedule = 13
	ModuleTaskCenter      = 14
	ModuleParam           = 15
	ModuleVoiceAssistant  = 16
	ModuleCameraGuide     = 17
	ModuleDevice          = 18
)

// ModuleIDForCmd derives the module_id from a command ID using the same
// range logic as WsCmd.getModuleId() in the original APK.
func ModuleIDForCmd(cmd uint32) uint32 {
	switch {
	case cmd >= 10000 && cmd < 10500:
		return ModuleCameraTele
	case cmd >= 11000 && cmd < 11500:
		return ModuleAstro
	case cmd >= 12000 && cmd < 12500:
		return ModuleCameraWide
	case cmd >= 13000 && cmd < 13300:
		return ModuleSystem
	case cmd >= 13500 && cmd < 13800:
		return ModuleRGBPower
	case cmd >= 14000 && cmd < 14500:
		return ModuleMotor
	case cmd >= 14800 && cmd < 14900:
		return ModuleTrack
	case cmd >= 15000 && cmd < 15200:
		return ModuleFocus
	case cmd >= 15200 && cmd < 15500:
		return ModuleNotify
	case cmd >= 15500 && cmd < 15600:
		return ModulePanorama
	case cmd >= 15700 && cmd < 15800:
		return ModuleITips
	case cmd >= 16100 && cmd < 16400:
		return ModuleShootingSchedule
	case cmd >= 16400 && cmd < 16600:
		return ModuleTaskCenter
	case cmd >= 16700 && cmd < 16800:
		return ModuleParam
	case cmd >= 16800 && cmd < 16900:
		return ModuleVoiceAssistant
	case cmd >= 17000 && cmd < 17100:
		return ModuleDevice
	default:
		return ModuleNone
	}
}

// Command IDs — Camera Tele (MODULE_CAMERA_TELE, 10000–10499).
const (
	CmdTeleOpenCamera          = 10000
	CmdTeleCloseCamera         = 10001
	CmdTelePhotograph          = 10002
	CmdTeleBurst               = 10003
	CmdTeleStopBurst           = 10004
	CmdTeleStartRecord         = 10005
	CmdTeleStopRecord          = 10006
	CmdTeleSetExpMode          = 10007
	CmdTeleGetExpMode          = 10008
	CmdTeleSetExp              = 10009
	CmdTeleGetExp              = 10010
	CmdTeleSetGainMode         = 10011
	CmdTeleGetGainMode         = 10012
	CmdTeleSetGain             = 10013
	CmdTeleGetGain             = 10014
	CmdTeleSetBrightness       = 10015
	CmdTeleGetBrightness       = 10016
	CmdTeleSetContrast         = 10017
	CmdTeleGetContrast         = 10018
	CmdTeleSetSaturation       = 10019
	CmdTeleGetSaturation       = 10020
	CmdTeleSetHue              = 10021
	CmdTeleGetHue              = 10022
	CmdTeleSetSharpness        = 10023
	CmdTeleGetSharpness        = 10024
	CmdTeleSetWBMode           = 10025
	CmdTeleGetWBMode           = 10026
	CmdTeleSetWBScene          = 10027
	CmdTeleGetWBScene          = 10028
	CmdTeleSetWBCT             = 10029
	CmdTeleGetWBCT             = 10030
	CmdTeleSetIRCut            = 10031
	CmdTeleGetIRCut            = 10032
	CmdTeleStartTimelapse      = 10033
	CmdTeleStopTimelapse       = 10034
	CmdTeleSetAllParams        = 10035
	CmdTeleGetAllParams        = 10036
	CmdTeleSetFeatureParam     = 10037
	CmdTeleGetAllFeatureParams = 10038
	CmdTeleGetWorkingState     = 10039
	CmdTeleSetJpgQuality       = 10040
	CmdTelePhotoRaw            = 10041
	CmdTeleSetRtspBitrate      = 10042
	CmdTeleSwitchResolution    = 10047
	CmdTeleSwitchFramerate     = 10048
	CmdTeleSwitchCropRatio     = 10049
	CmdTeleSetPreviewQuality   = 10050
)

// Camera Wide (MODULE_CAMERA_WIDE, 12000–12499).
const (
	CmdWideOpenCamera       = 12000
	CmdWideCloseCamera      = 12001
	CmdWideSetExpMode       = 12002
	CmdWideGetExpMode       = 12003
	CmdWideSetExp           = 12004
	CmdWideGetExp           = 12005
	CmdWideSetGain          = 12006
	CmdWideGetGain          = 12007
	CmdWidePhotograph       = 12022
	CmdWideBurst            = 12023
	CmdWideStopBurst        = 12024
	CmdWidePhotoRaw         = 12029
	CmdWideStartRecord      = 12030
	CmdWideStopRecord       = 12031
	CmdWideGetAllParams     = 12027
	CmdWideSetAllParams     = 12028
)

// Astro (MODULE_ASTRO, 11000–11499).
const (
	CmdAstroStartCalibration    = 11000
	CmdAstroStopCalibration     = 11001
	CmdAstroStartGotoDSO        = 11002
	CmdAstroStartGotoSolar      = 11003
	CmdAstroStopGoto            = 11004
	CmdAstroStartLiveStacking   = 11005
	CmdAstroStopLiveStacking    = 11006
	CmdAstroStartRawDark        = 11007
	CmdAstroStopRawDark         = 11008
	CmdAstroGoLive              = 11010
	CmdAstroStartOneClickGoto   = 11013
	CmdAstroStopOneClickGoto    = 11015
	CmdAstroStartEqSolving      = 11018
	CmdAstroStopEqSolving       = 11019
	CmdAstroStartAiEnhance      = 11029
	CmdAstroStopAiEnhance       = 11030
	CmdAstroStartMosaic         = 11031
	CmdAstroStartSkyFinder      = 11047
	CmdAstroStopSkyFinder       = 11048
)

// System (MODULE_SYSTEM, 13000–13299).
const (
	CmdSystemSetTime        = 13000
	CmdSystemSetTimeZone    = 13001
	CmdSystemSetMtpMode     = 13002
	CmdSystemSetCpuMode     = 13003
	CmdSystemSetMasterLock  = 13004
	CmdSystemSetLocation    = 13010
)

// RGB Power (MODULE_RGB_POWER, 13500–13799).
const (
	CmdRGBOn      = 13500
	CmdRGBOff     = 13501
	CmdPowerDown  = 13502
	CmdReboot     = 13505
)

// Motor constants — extended (14001-14005 are inferred from gaps)
const (
	CmdMotorRun                = 14000
	CmdMotorGetPosition        = 14001 // inferred: missing ID between RUN and STOP
	CmdMotorStop               = 14002
	CmdMotorReset              = 14003 // inferred: missing ID after STOP
	CmdMotorChangeSpeed        = 14004 // inferred
	CmdMotorChangeDirection    = 14005 // inferred
	CmdMotorJoystick           = 14006
	CmdMotorJoystickFixedAngle = 14007
	CmdMotorJoystickStop       = 14008
	CmdMotorDualCameraLinkage  = 14009
)

// Track (MODULE_TRACK, 14800–14899).
const (
	CmdTrackStart       = 14800
	CmdTrackStop        = 14801
	CmdSentryStart      = 14802
	CmdSentryStop       = 14803
	CmdSwitchMainPreview = 14809
)

// Focus (MODULE_FOCUS, 15000–15199).
const (
	CmdFocusAutoFocus         = 15000
	CmdFocusManualSingle      = 15001
	CmdFocusStartManualCont   = 15002
	CmdFocusStopManualCont    = 15003
	CmdFocusStartAstroAF      = 15004
	CmdFocusStopAstroAF       = 15005
	CmdFocusGetUserInfinity   = 15011
	CmdFocusSetUserInfinity   = 15012
)

// Panorama (MODULE_PANORAMA, 15500–15599).
const (
	CmdPanoStartGrid        = 15500
	CmdPanoStop             = 15501
	CmdPanoStartStitch      = 15503
	CmdPanoStopStitch       = 15504
	CmdPanoStartFraming     = 15509
	CmdPanoStopFraming      = 15510
	CmdPanoResetFraming     = 15511
	CmdPanoUpdateFramingRect = 15512
)

// Task Center (MODULE_TASK_CENTER, 16400–16599).
const (
	CmdTaskStartTask        = 16400
	CmdTaskStopTask         = 16401
	CmdTaskSwitchMode       = 16402
	CmdTaskSwitchTech       = 16403
	CmdTaskGetDeviceState   = 16405
)

// Notify (MODULE_NOTIFY, 15200–15399) — server-pushed, not requestable.
const (
	NotifyTrackResult         = 15225
	NotifyStateCaptureRawDark = 15206
	NotifyCalibrationResult   = 15256
	NotifyStateAstroGoto      = 15211
	NotifyTemperature         = 15243
	NotifySDCardInfo          = 15203
	NotifyPowerOff            = 15229
)
