HealthEndpoint.swift 2.47 KB
//
//  HealthEndpoint.swift
//  hippo-watch Watch App
//
//  Created by shihao on 2025/7/8.
//

import Foundation


enum HealthEndpoint: APIEndpoint {
    case getActivityTarget
    case getHealthData(type: HealthType)
    case getTodayData(isFriend: Bool)
    case upload(data: [String: Any])
    case uploadBatch(data: [[String: Any]])
    case uploadSleep(data: [[String: Any]])
    case uploadActivityTarget(data: [String: Any])
    case getUploadTimes
    case uploadPulse(pulseType: PulseType)
    
    var path: String {
        switch self {
        case .getActivityTarget:
            return "/client/doublefeel/health/v2/activity_target/"
        case .getHealthData:
            return "/client/doublefeel/health/v2/dial_health_info/"
        case .getTodayData:
            return "/client/doublefeel/health/v2/dial_today_info/"
        case .upload, .uploadBatch, .getUploadTimes:
            return "/client/doublefeel/health/v2/data_upload/common/"
        case .uploadSleep:
            return "/client/doublefeel/health/v2/data_upload/sleep/"
        case .uploadActivityTarget:
            return "/client/doublefeel/health/v2/activity_target/"
        case .uploadPulse:
            return "/client/doublefeel/health/pulse/"
        }
    }
    
    var method: HTTPMethod {
        switch self {
        case .getActivityTarget, .getHealthData, .getTodayData, .getUploadTimes:
            return .get
        case .upload, .uploadBatch, .uploadSleep, .uploadActivityTarget, .uploadPulse:
            return .post
        }
    }
    
    var parameters: [String: Any]? {
        switch self {
        case .getActivityTarget, .getUploadTimes:
            return nil
        case .getTodayData(let isFriend):
            return ["is_dial_friend": isFriend ? 1 : 0]
        case let .getHealthData(type):
            return ["show_type": type.rawValue]
        case .upload(let data):
            return ["data_list": [data]]
        case .uploadBatch(let data), .uploadSleep(let data):
            return ["data_list": data]
        case .uploadActivityTarget(let data):
            return data
        case .uploadPulse(let pulseType):
            return ["pulse_type": pulseType.rawValue]
        }
    }
    
    var encoding: ParameterEncoding {
        switch self {
        case .getActivityTarget, .getHealthData, .getTodayData, .getUploadTimes:
            return .url
        case .upload, .uploadBatch, .uploadSleep, .uploadActivityTarget, .uploadPulse:
            return .json
        }
    }
}