/*
 * 文 件 名:  EmsApi
 * 版    权:  华设设计集团股份有限公司
 * 描    述:  EMS Server API 接口定义
 * 修 改 人:  lvwenbin
 * 修改时间:  2025/12/9
 */
package com.ruoyi.ems.retrofit;

import retrofit2.Call;
import retrofit2.http.Body;
import retrofit2.http.GET;
import retrofit2.http.Headers;
import retrofit2.http.POST;
import retrofit2.http.Query;

import java.util.Map;

/**
 * EMS Server API 接口
 * 用于 ems-dev-adapter 调用 ems-server 的策略相关接口
 *
 * @author lvwenbin
 * @version [版本号, 2025/12/9]
 */
public interface EmsApi {

    /**
     * 属性值变化通知（单个）
     *
     * @param objCode  设备代码
     * @param attrKey  属性键
     * @param newValue 新值
     * @param oldValue 旧值（可选）
     * @return 响应
     */
    @Headers({"Content-Type: application/json"})
    @POST("/ems/energyStrategy/onAttrValueChanged")
    Call<String> onAttrValueChanged(
        @Query("objCode") String objCode,
        @Query("attrKey") String attrKey,
        @Query("newValue") String newValue,
        @Query("oldValue") String oldValue
    );

    /**
     * 属性值变化通知（批量）
     *
     * @param request 请求体 { "objCode": "xxx", "attributes": { "key1": "val1", ... } }
     * @return 响应
     */
    @Headers({"Content-Type: application/json"})
    @POST("/ems/energyStrategy/onAttrValueChangedBatch")
    Call<String> onAttrValueChangedBatch(@Body Map<String, Object> request);

    /**
     * 设备事件通知
     *
     * @param objCode   设备代码
     * @param eventKey  事件键
     * @param eventData 事件数据
     * @return 响应
     */
    @Headers({"Content-Type: application/json"})
    @POST("/ems/energyStrategy/onDeviceEvent")
    Call<String> onDeviceEvent(
        @Query("objCode") String objCode,
        @Query("eventKey") String eventKey,
        @Body Map<String, Object> eventData
    );

    /**
     * 获取调度器状态
     *
     * @return 响应
     */
    @GET("/ems/energyStrategy/scheduler/status")
    Call<String> getSchedulerStatus();

    /**
     * 重新加载调度器
     *
     * @return 响应
     */
    @POST("/ems/energyStrategy/scheduler/reload")
    Call<String> reloadScheduler();
}