package shop.alien.store.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import shop.alien.entity.store.StoreRenovationRequirement;
import shop.alien.entity.store.dto.StoreRenovationRequirementDto;

import java.util.List;

/**
 * 装修需求动态表 服务类
 *
 * @author auto-generated
 * @since 2025-01-15
 */
public interface StoreRenovationRequirementService extends IService<StoreRenovationRequirement> {

    /**
     * 发布装修需求（保存或更新）
     *
     * @param dto 装修需求DTO
     * @return 是否成功
     */
    boolean saveOrUpdateRequirement(StoreRenovationRequirementDto dto);

    /**
     * 根据ID获取装修需求详情
     *
     * @param id 需求ID
     * @return 装修需求DTO
     */
    StoreRenovationRequirementDto getRequirementDetail(Integer id);

    /**
     * 分页查询装修需求列表
     *
     * @param page 分页对象
     * @param storeId 门店ID（可选）
     * @param city 城市（可选）
     * @param renovationType 装修类型（可选，1:新房装修, 2:旧房改造, 3:局部装修）
     * @param status 状态（可选，0:草稿, 1:已发布, 2:已下架）
     * @param auditStatus 审核状态（可选，0:待审核, 1:审核通过, 2:审核失败）
     * @param sortType 排序类型（1:最新发布, 2:价格最高, 3:面积最大），默认为1
     * @param requirementTitle 需求标题（可选，模糊查询）
     * @param startTime 开始时间（可选，格式：yyyy-MM-dd，查询创建时间范围）
     * @param endTime 结束时间（可选，格式：yyyy-MM-dd，查询创建时间范围）
     * @param hasCommunicated 是否已沟通（可选，true:已沟通, false:未沟通）
     * @return 分页结果
     */
    IPage<StoreRenovationRequirementDto> getRequirementPage(Page<StoreRenovationRequirementDto> page,
                                                             Integer storeId,
                                                             String city,
                                                             Integer renovationType,
                                                             Integer status,
                                                             Integer auditStatus,
                                                             Integer sortType,
                                                             String requirementTitle,
                                                             String startTime,
                                                             String endTime,
                                                             Boolean hasCommunicated);

    /**
     * 更新浏览数
     *
     * @param id 需求ID
     */
    void incrementViewCount(Integer id);

    /**
     * 更新咨询数
     *
     * @param id 需求ID
     */
    void incrementInquiryCount(Integer id);

    /**
     * 更新状态
     *
     * @param id 需求ID
     * @param status 状态（0:草稿, 1:已发布, 2:已下架）
     * @return 是否成功
     */
    boolean updateStatus(Integer id, Integer status);

    /**
     * 审核装修需求
     *
     * @param id 需求ID
     * @param auditStatus 审核状态（1:审核通过, 2:审核失败）
     * @param auditReason 审核原因（审核失败时必填）
     * @param auditUserId 审核人ID
     * @return 是否成功
     */
    boolean auditRequirement(Integer id, Integer auditStatus, String auditReason, Integer auditUserId);

    /**
     * 删除装修需求（逻辑删除）
     *
     * @param id 需求ID
     * @return 是否成功
     */
    boolean deleteRequirement(Integer id);

    /**
     * 获取门店发布的装修需求列表
     *
     * @param storeId 门店ID
     * @return 装修需求列表
     */
    List<StoreRenovationRequirementDto> getRequirementListByStoreId(Integer storeId);
}

