package com.seer.teach.iot.api;

import com.seer.teach.iot.api.req.UserDeviceReqDTO;
import com.seer.teach.iot.api.resp.DeviceRespDTO;
import com.seer.teach.iot.api.resp.UserDeviceRespDTO;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;

/**
 * 设备接口
 * <p>
 * 获取设备数据
 * </p>
 *
 * @author Captain
 * @version 1.0
 * @since 2025-07-15 14:51
 */
@FeignClient(name = ApiConstants.SERVER_NAME, contextId = "userDeviceServiceApi", path = "/seer/iot")
public interface UserDeviceServiceApi {

    /**
     * 保存用户与设备的关联关系
     *
     * @param userDeviceReqDTO 用户设备请求参数
     * @return 是否保存成功
     */
    @PostMapping("/save")
    boolean save(@RequestBody UserDeviceReqDTO userDeviceReqDTO);

    /**
     * 根据主键ID获取用户设备关系
     *
     * @param id 用户设备主键ID
     * @return 用户设备响应对象
     */
    @GetMapping("/getUserDeviceById")
    UserDeviceRespDTO getUserDeviceById(@RequestParam("id") Integer id);

    /**
     * 根据用户ID获取用户设备关系
     *
     * @param userId 用户ID
     * @return 用户设备响应对象
     */
    @GetMapping("/getUserDeviceByUserId")
    UserDeviceRespDTO getUserDeviceByUserId(@RequestParam("userId") Integer userId);

    /**
     * 根据设备ID获取用户设备关系
     *
     * @param deviceId 设备
     * @return 用户设备响应对象
     */
    @GetMapping("/getUserDeviceByDeviceId")
    UserDeviceRespDTO getUserDeviceByDeviceId(@RequestParam("deviceId") Integer deviceId);

    /**
     * 根据用户ID获取设备ID
     *
     * @param userId 用户ID
     * @return 设备ID
     */
    @GetMapping("/getDeviceIdByUserId")
    Integer getDeviceIdByUserId(@RequestParam("userId") Integer userId);

    /**
     * 根据设备标识获取用户ID
     *
     * @param device 设备标识字符串（如SN号）
     * @return 用户ID
     */
    @GetMapping("/getUserIdByDevice")
    Integer getUserIdByDevice(@RequestParam("device") String device);

    /**
     * 根据用户ID获取设备标识
     *
     * @param userId 用户ID
     * @return 设备标识字符串
     */
    @GetMapping("/getDeviceByUserId")
    String getDeviceByUserId(@RequestParam("userId") Integer userId);

       /**
     * 根据用户ID获取设备信息
     *
     * @param userId 用户ID
     * @return 设备响应数据传输对象
     */
    @GetMapping("/getDeviceDTOByUserId")
    DeviceRespDTO getDeviceDTOByUserId(@RequestParam("userId") Integer userId);

    /**
     * 根据设备ID获取用户ID
     *
     * @param deviceId 设备ID
     * @return 用户ID
     */
    @GetMapping("/getUserIdByDeviceId")
    Integer getUserIdByDeviceId(@RequestParam("deviceId") Integer deviceId);
}