package com.yhy.module.core.service.boq;

import com.yhy.module.core.controller.admin.boq.vo.BoqSubItemRespVO;
import com.yhy.module.core.controller.admin.boq.vo.BoqSubItemSaveReqVO;
import com.yhy.module.core.controller.admin.boq.vo.BoqSubItemSwapSortReqVO;
import java.util.List;
import javax.validation.Valid;

/**
 * 清单子项 Service 接口
 *
 * @author yhy
 */
public interface BoqSubItemService {

    /**
     * 创建清单子项
     *
     * @param createReqVO 创建信息
     * @return 子项ID
     */
    Long createBoqSubItem(@Valid BoqSubItemSaveReqVO createReqVO);

    /**
     * 更新清单子项
     *
     * @param updateReqVO 更新信息
     */
    void updateBoqSubItem(@Valid BoqSubItemSaveReqVO updateReqVO);

    /**
     * 删除清单子项
     *
     * @param id 子项ID
     */
    void deleteBoqSubItem(Long id);

    /**
     * 获取清单子项
     *
     * @param id 子项ID
     * @return 子项信息
     */
    BoqSubItemRespVO getBoqSubItem(Long id);

    /**
     * 获取清单子项列表
     *
     * @param boqItemTreeId 清单项树ID
     * @return 列表
     */
    List<BoqSubItemRespVO> getBoqSubItemList(Long boqItemTreeId);

    /**
     * 交换排序
     *
     * @param swapReqVO 交换信息
     */
    void swapSort(@Valid BoqSubItemSwapSortReqVO swapReqVO);

    /**
     * 获取清单子项关联的目录信息（包含绑定的定额专业ID）
     *
     * @param id 清单子项ID
     * @return 包含定额专业ID的子项信息
     */
    BoqSubItemRespVO getBoqSubItemCatalogInfo(Long id);
}
