package com.usky.sas.service;

import com.usky.common.core.bean.CommonPage;
import com.usky.common.mybatis.core.CrudService;
import com.usky.sas.domain.SasMaps;
import com.usky.sas.service.vo.MapListItem;
import com.usky.sas.service.vo.MapDeviceBindRequest;
import com.usky.sas.service.vo.MapPageRequest;
import com.usky.sas.service.vo.MapSaveRequest;
import com.usky.sas.service.vo.MapSaveWithDevicesRequest;
import com.usky.sas.service.vo.MapTreeItem;
import com.usky.sas.service.vo.MapInfoVo;
import com.usky.sas.service.vo.PicAddRequest;
import com.usky.sas.service.vo.PicSourceInfo;
import com.usky.sas.service.vo.PicSourcePageRequest;
import com.usky.sas.service.vo.PicSourceUpdateRequest;

public interface SasMapService extends CrudService<SasMaps> {

    CommonPage<MapListItem> page(MapPageRequest request);

    String create(MapSaveRequest request);

    void update(String id, MapSaveRequest request);

    void delete(String id);

    String bindDevice(String mapId, MapDeviceBindRequest request);

    void unbindDevice(String mapId, String deviceId);

    /**
     * 保存电子地图及其设备点位（批量新增/更新/删除）
     */
    void saveMapInfo(MapSaveWithDevicesRequest request);

    /**
     * 获取地图导航树形列表
     */
    java.util.List<MapTreeItem> getMapTree();

    /**
     * 按类型获取地图导航树形列表（如视频导出防护 type=1003）
     */
    java.util.List<MapTreeItem> getMapTreeByType(Integer type);

    /**
     * 获取地图详细信息（含背景图 URL、设备点位及设备信息、点位图标 URL）
     *
     * @param mapId 地图主键
     * @return 地图详情，不存在则 null
     */
    MapInfoVo getMapInfo(String mapId);

    /**
     * 新增图片记录（不入库二进制文件，仅根据 url/path 写入 sas_pic）
     *
     * @param request 图片地址信息
     * @return 新建图片主键 id（sas_pic.id）
     */
    String addPic(PicAddRequest request);

    /**
     * 分页查询图片资源（sas_pic_source），可按 picType 筛选，每条记录带图片完整访问 URL
     *
     * @param request 分页及 picType 筛选参数
     * @return 分页结果
     */
    CommonPage<PicSourceInfo> getPicSource(PicSourcePageRequest request);

    /**
     * 修改图片资源（更新 sas_pic_source 及可选的关联 sas_pic.url/path）
     *
     * @param id      图片资源主键（sas_pic_source.id）
     * @param request 要更新的字段
     */
    void updatePicSource(String id, PicSourceUpdateRequest request);

    /**
     * 删除图片资源（仅删除 sas_pic_source 记录，不删除关联的 sas_pic）
     *
     * @param id 图片资源主键（sas_pic_source.id）
     */
    void deletePicSource(String id);
}

