import http from './http' export type HealthUser = { id: number phone: string displayName: string avatarUrl?: string } export type AuthOutput = { accessToken: string refreshToken: string user: HealthUser } export type HealthProfile = { birthday?: string gender?: string heightCm?: number weightKg?: number averageSleepHours?: number dailyExerciseMinutes?: number dietPreference?: string healthGoal?: string } export type PlanItem = { moduleCode: string title: string target: string advice: string } export type HealthPlan = { id: number version: number title: string summary: string createTime: string items: PlanItem[] } export type PersonalizedSceneConfig = { targetHumidity: number dehumidifierMode: string fanLevel: string enableUv: boolean lightBrightnessPercent: number lightColorTemperatureKelvin: number mattressTargetTemp: number mattressLeftFirmness: number mattressRightFirmness: number mattressHeatingLevel: number mattressMode: string enableFragrance: boolean fragranceLevel: number enableSpeakerSleepMode: boolean speakerAudioMode: string speakerVolumePercent: number } export type HealthAssessmentAnswers = { sleepDuration: string fallingAsleepSpeed: string temperaturePreference: string nightAwakening: string mattressPreference: string exerciseFrequency: string muscleFatigueArea: string activeTimeOfDay: string mealRegularity: string flavorPreference: string lateNightEating: string dailyWaterIntake: string } export type SaveHealthAssessmentInput = { basicInfo: HealthProfile answers: HealthAssessmentAnswers } export type HealthAssessmentOutput = { hasCompletedAssessment: boolean basicInfo: HealthProfile answers: HealthAssessmentAnswers sceneConfig: PersonalizedSceneConfig bmi?: number | null bmiStatus: string } export type Dashboard = { user: HealthUser profile?: HealthProfile selectedModules: string[] currentPlan?: HealthPlan hasCompletedAssessment: boolean bmi?: number | null bmiStatus?: string sceneConfig?: PersonalizedSceneConfig } export type HealthDeviceCategory = | 'EnvironmentControl' | 'EnvironmentSensor' | 'Sleep' | 'BodyComposition' | 'Fragrance' | 'Lighting' | 'Media' | 'Other' export type HomeAssistantEntity = { entityId: string domain: string name: string state: string available: boolean unit?: string attributes?: Record } export type HomeAssistantDiscoveredDevice = { deviceId: string name: string manufacturer: string model: string areaName?: string category: HealthDeviceCategory | string online: boolean primaryControlEntityId?: string | null entities: HomeAssistantEntity[] metrics?: Record } export type HomeAssistantSummary = { totalDevices: number onlineDevices: number offlineDevices: number totalEntities: number availableEntities: number } export type HomeAssistantSceneDevicesSummary = { total: number available: number } export type HomeAssistantEnvironmentData = { temperature?: number | null humidity?: number | null pm25?: number | null pm10?: number | null co2?: number | null hcho?: number | null tvoc?: number | null } export type HomeAssistantScenePreset = { deviceName: string category: string entityId: string available: boolean availabilityMessage: string action: string detail: string parameters: Record } export type HomeAssistantDeviceSwitchOutput = { success: boolean deviceId: string entityId: string state: string message: string } export type HomeAssistantStatus = { connected: boolean message: string checkedAt: string summary: HomeAssistantSummary devices: HomeAssistantDiscoveredDevice[] sceneDevices: HomeAssistantSceneDevicesSummary environment: HomeAssistantEnvironmentData scenePresets?: HomeAssistantScenePreset[] controlParameters?: Record } export type HomeAssistantParameterState = { entityId: string state: string available: boolean attributes?: Record } export type HomeAssistantSceneAction = { name: string entityId: string status: string message: string } export type HomeAssistantSceneResult = { sceneCode: string sceneName: string success: boolean status: string message: string executedAt: string actions: HomeAssistantSceneAction[] } export type HomeAssistantSetParameterInput = { deviceId: string entityId?: string parameterType: string value: unknown } export type HomeAssistantSetParameterOutput = { success: boolean deviceId: string parameterType: string message: string } export const healthApi = { register: (payload: { phone: string; password: string; displayName: string }) => http.post('/api/health/auth/register', payload), login: (payload: { phone: string; password: string }) => http.post('/api/health/auth/login', payload), dashboard: () => http.get('/api/health/dashboard'), getAssessment: () => http.get('/api/health/assessment'), saveAssessment: (payload: SaveHealthAssessmentInput) => http.post('/api/health/assessment', payload), homeAssistantStatus: () => http.get('/api/health/home-assistant/status'), executeSleepScene: () => http.post('/api/health/home-assistant/scenes/sleep'), executeAllOffScene: () => http.post('/api/health/home-assistant/scenes/all-off'), switchDevice: (payload: { deviceId: string; turnOn: boolean; entityId?: string }) => http.post('/api/health/home-assistant/devices/switch', payload), setParameter: (payload: HomeAssistantSetParameterInput) => http.post('/api/health/home-assistant/devices/set-parameter', payload) }