package com.gxwebsoft.cms.service;

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

import java.util.List;

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

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

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

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

    PageResult<CmsApp> pageRelAll(CmsAppParam param);

    // 创建站点
    CmsApp create(CmsApp cmsApp);

    CmsApp getByIdRelAll(Integer id);

    boolean updateByIdAll(CmsApp cmsApp);

    boolean removeByIdAll(Integer id);

    CmsApp getByTenantId(Integer tenantId);

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

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

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

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

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

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

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

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

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