package com.sonic.frog.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.sonic.common.rpc.Page;
import com.sonic.frog.domain.entity.AiUserAlbum;
import com.sonic.frog.domain.input.*;
import com.sonic.frog.domain.output.AiAlbumDetailOutput;
import com.sonic.frog.domain.output.ListAiAlbumOutput;
import com.sonic.frog.domain.output.ViewUnlockAlbumImgOutput;
import com.sonic.frog.lib.output.AIUserAlbumApiOutput;

import java.security.InvalidKeyException;
import java.util.List;

/**
 * AI用户相册业务接口
 */
public interface AiUserAlbumService extends IService<AiUserAlbum> {

    /**
     * 批量插入返回主键id列表
     *
     * @param currentUserId
     * @param addAlbum
     * @return
     */
    List<Long> batchAddAlbum(Long currentUserId, BatchAddAlbumInput addAlbum);

    /**
     * 设置默认图片
     *
     * @param currentUserId
     * @param aiId
     * @param albumId
     */
    void setDefaultAlbum(Long currentUserId, Long aiId, Long albumId);

    /**
     * 相册删除
     *
     * @param currentUserId
     * @param albumId
     */
    void delAlbum(Long currentUserId, Long albumId);

    /**
     * 根据aiID删除用户相册
     *
     * @param aiId
     */
    void delByAiId(Long aiId);

    /**
     * 点赞相册图片
     *
     * @param currentUserId
     * @param input
     */
    void likeOrCancelPic(Long currentUserId, LikeOrCancelPicInput input);

    /**
     * 相册列表
     *
     * @param input
     * @param currentUserId
     * @return
     */
    Page<ListAiAlbumOutput> listAlbums(AlbumListInput input, Long currentUserId);

    /**
     * 相册列表
     * @param currentUserId
     * @param idList
     * @return
     */
    List<ListAiAlbumOutput> listByIds(Long currentUserId, List<Long> idList);

    /**
     * 添加Ai形象图或编辑形象图时，自动添加一张默认图片到Ai相册中
     */
    void addDefaultAlbum(Long currentUserId, Long aiId, String imageUrl, String width, String height);

    /**
     * 设置相册解锁价格
     *
     * @param currentUserId
     * @param input
     */
    void setAlbumUnlockPrice(Long currentUserId, SetAlbumUnlockPriceInput input);

    /**
     * 解锁加密图片
     *
     * @param userId
     * @param input
     */
    ViewUnlockAlbumImgOutput unlockAlbumImg(Long userId, UnlockAlbumImgInput input);

    /**
     * 获取加密图片解锁后访问
     *
     * @param userId
     * @param input
     * @return
     */
    ViewUnlockAlbumImgOutput viewUnlockAlbumImg(Long userId, ViewUnlockAlbumImgInput input);

    /**
     * 随机获取一张未解锁的图片
     * @param input
     * @return
     */
    AIUserAlbumApiOutput getRandomLockImage(GetRandomLockImageInput input) throws InvalidKeyException;

    /**
     * 秘密爱慕者请求的相册详情信息
     * @param albumId
     * @return
     */
    AiAlbumDetailOutput rcDetail(Long albumId) throws InvalidKeyException;

}