package com.gxwebsoft.cms.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.gxwebsoft.common.core.web.PageResult;
import com.gxwebsoft.cms.entity.CmsWebsite;
import com.gxwebsoft.cms.param.CmsWebsiteParam;
import com.gxwebsoft.shop.vo.ShopVo;

import java.util.List;

/**
 * 网站信息记录表Service
 *
 * @author 科技小王子
 * @since 2024-09-10 20:36:14
 */
public interface CmsWebsiteService extends IService<CmsWebsite> {

    /**
     * 分页关联查询
     *
     * @param param 查询参数
     * @return PageResult<CmsWebsite>
     */
    PageResult<CmsWebsite> pageRel(CmsWebsiteParam param);

    /**
     * 关联查询全部
     *
     * @param param 查询参数
     * @return List<CmsWebsite>
     */
    List<CmsWebsite> listRel(CmsWebsiteParam param);

    /**
     * 根据id查询
     *
     * @param websiteId 站点ID
     * @return CmsWebsite
     */
    CmsWebsite getByIdRel(Integer websiteId);

    PageResult<CmsWebsite> pageRelAll(CmsWebsiteParam param);

    // 创建站点
    CmsWebsite create(CmsWebsite cmsWebsite);

    CmsWebsite getByIdRelAll(Integer id);

    boolean updateByIdAll(CmsWebsite cmsWebsite);

    boolean removeByIdAll(Integer id);

    CmsWebsite getByTenantId(Integer tenantId);

    /**
     * 获取网站基本信息（VO格式）
     *
     * @param tenantId 租户ID
     * @return 网站信息VO
     */
    ShopVo getSiteInfo(Integer tenantId);

    /**
     * 清除网站信息缓存
     *
     * @param tenantId 租户ID
     */
    void clearSiteInfoCache(Integer tenantId);

    // ─── 发布管理 ──────────────────────────────────────────────────

    /** 提交上架审核 */
    void submitReview(Integer websiteId, String priceType, Integer price,
                      String subscriptionPeriod, String appDescription,
                      String detailDescription, String screenshots, Integer userId);

    /** 撤回审核申请（回到开发中） */
    void withdrawReview(Integer websiteId, Integer userId);

    /** 下架应用 */
    void unpublish(Integer websiteId, Integer userId);

    /** 管理员审核通过 */
    void approveReview(Integer websiteId, Integer reviewerId);

    /** 管理员审核拒绝 */
    void rejectReview(Integer websiteId, String rejectReason, Integer reviewerId);

    /** 分页查询审核列表（管理员） */
    PageResult<CmsWebsite> pageReviews(CmsWebsiteParam param);
}
