package com.seer.teach.iot.api;

import com.seer.teach.iot.api.req.DeviceReqDTO;
import com.seer.teach.iot.api.resp.DeviceRespDTO;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PutMapping;
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 = "devicesServiceApi",path = "/seer/iot")
public interface DeviceInfoServiceApi {

	/**
	 * 根据设备号获取设备信息
	 *
	 * @param device 设备号（如 SN 编号）
	 * @return 设备信息 DTO
	 */
	@GetMapping("/getByDevice")
	DeviceRespDTO getDevice(@RequestParam("device") String device);

	/**
	 * 根据设备 ID 获取设备信息
	 *
	 * @param id 设备主键 ID
	 * @return 设备信息 DTO
	 */
	@GetMapping("/getDeviceById")
	DeviceRespDTO getById(@RequestParam("id") Integer id);

	/**
	 * 根据设备号获取设备 ID
	 *
	 * @param device 设备号
	 * @return 设备 ID
	 */
	@GetMapping("/getDeviceIdByDevice")
	Integer getDeviceIdByDevice(@RequestParam("device") String device);

	/**
	 * 根据设备 ID 更新设备信息。
	 *
	 * <p>此接口用于根据请求体中提供的设备 ID 及相关信息，对指定设备进行更新操作。</p>
	 *
	 * @param reqDTO 包含设备 ID 和更新字段的请求参数对象，必须为非空，通常包含如设备名称、状态等字段
	 */
	@PutMapping("/updateDeviceById")
	void updateDeviceById(@RequestBody DeviceReqDTO reqDTO);

	/**
	 * 根据UnionId获取设备信息
	 * @param unionId
	 * @return
	 */
	@GetMapping("/getCityIdByUserId")
	Integer getCityIdByUserId(@RequestParam("userId") Integer userId);


	/**
	 * 根据cityId更新
	 * @param cityId
	 * @return
	 */
	@PutMapping("/updateDeviceCityByUserId")
	void updateDeviceCityByUserId(@RequestParam("userId") Integer userId, @RequestParam("cityId") Integer cityId);

}
