package com.liquidnet.service.goblin.service.manage;

import com.liquidnet.service.base.PagedResult;
import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.goblin.dto.manage.GoblinStoreMgtArtistApplyRevokeParams;
import com.liquidnet.service.goblin.dto.manage.GoblinStoreMgtArtistApplySubmitParams;
import com.liquidnet.service.goblin.dto.manage.GoblinStoreMgtArtistTopicCreateParams;
import com.liquidnet.service.goblin.dto.manage.GoblinStoreMgtArtistTopicDeleteParams;
import com.liquidnet.service.goblin.dto.manage.GoblinStoreMgtArtistTopicStatusParams;
import com.liquidnet.service.goblin.dto.manage.GoblinStoreMgtArtistTopicUpdateParams;
import com.liquidnet.service.goblin.dto.manage.vo.GoblinStoreMgtArtistApplyListItemVo;
import com.liquidnet.service.goblin.dto.manage.vo.GoblinStoreMgtArtistAuthListVo;
import com.liquidnet.service.goblin.dto.manage.vo.GoblinStoreMgtArtistSearchItemVo;
import com.liquidnet.service.goblin.dto.manage.vo.GoblinStoreMgtArtistTopicDetailVo;
import com.liquidnet.service.goblin.dto.manage.vo.GoblinStoreMgtArtistTopicGoodsSearchItemVo;
import com.liquidnet.service.goblin.dto.manage.vo.GoblinStoreMgtArtistTopicPageVo;

/**
 * 商家端-艺人关联申请 / 艺人专题
 * <p>店铺上下文：登录 UID → Redis 店铺信息取 storeId（对齐售后单管理）</p>
 */
public interface IGoblinStoreMgtArtistService {

    /**
     * 搜索可申请艺人（仅启用状态），支持关键词模糊匹配，DB 真分页
     */
    ResponseDto<PagedResult<GoblinStoreMgtArtistSearchItemVo>> searchArtist(String keyword, int page, int size);

    /**
     * 提交艺人关联申请，校验艺人存在且启用、同店同艺人无待审核申请
     *
     * @return data = applyId
     */
    ResponseDto<String> submitApply(GoblinStoreMgtArtistApplySubmitParams params);

    /**
     * 本店艺人关联申请列表，支持按状态筛选
     */
    ResponseDto<PagedResult<GoblinStoreMgtArtistApplyListItemVo>> applyList(Integer status, int page, int size);

    /**
     * 撤销艺人关联申请，仅待审核状态可撤销
     */
    ResponseDto<Void> revokeApply(GoblinStoreMgtArtistApplyRevokeParams params);

    /**
     * 本店已授权艺人列表，过滤过期和失效授权
     */
    ResponseDto<GoblinStoreMgtArtistAuthListVo> authList();

    /**
     * 本店艺人专题列表（未删除），响应含各状态数量统计
     */
    ResponseDto<GoblinStoreMgtArtistTopicPageVo> topicList(Integer status, int page, int size);

    /**
     * 艺人专题详情，含内嵌商品列表（名称/图片/价格），艺人名联查 kylin_artist
     */
    ResponseDto<GoblinStoreMgtArtistTopicDetailVo> topicDetail(String topicId);

    /**
     * 创建艺人专题，校验关联艺人有本店有效授权、专题名称不重复、商品属本店且未删除
     *
     * @return data = topicId
     */
    ResponseDto<String> topicCreate(GoblinStoreMgtArtistTopicCreateParams params);

    /**
     * 编辑艺人专题，商品全量替换
     */
    ResponseDto<Void> topicUpdate(GoblinStoreMgtArtistTopicUpdateParams params);

    /**
     * 删除艺人专题（逻辑删除 delFlg=1）
     */
    ResponseDto<Void> topicDelete(GoblinStoreMgtArtistTopicDeleteParams params);

    /**
     * 专题上下架，0=待上架 1=已上架 2=已下架
     */
    ResponseDto<Void> topicStatus(GoblinStoreMgtArtistTopicStatusParams params);

    /**
     * 搜索本店可添加商品（普通商品，非市场活动），支持关键词模糊匹配，DB 真分页
     */
    ResponseDto<PagedResult<GoblinStoreMgtArtistTopicGoodsSearchItemVo>> searchGoods(String keyword, int page, int size);
}
