package shop.alien.store.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import shop.alien.entity.store.StoreClockIn;
import shop.alien.entity.store.vo.ClockInRecordValidateVo;
import shop.alien.entity.store.vo.StoreClockInDeleteFlagVo;
import shop.alien.entity.store.vo.StoreClockInVo;

import java.util.List;
import java.util.Map;

/**
 * <p>
 * 店铺打卡 服务类
 * </p>
 *
 * @author ssk
 * @since 2025-05-15
 */
public interface StoreClockInService extends IService<StoreClockIn> {

    StoreClockIn addStoreClockIn(StoreClockIn storeClockIn);

    IPage<StoreClockInVo> getStoreClockInList(Integer userId, int page, int size, String phoneId, int mySelf, Integer storeId, Integer year, Integer month, String city);

    int deleteClockIn(Integer id);

    int setPermission(int userId, Integer id, int permission);

    int setImgAndAiContent(int id, String img,String aiContent);

    List<Map<Integer, Integer>> getStoreClockInCount();
    /**
     * 获取所有店铺打卡次数（有图片并且设置为可见的）
     *
     * @return map
     */
    List<Map<Integer, Integer>> getStoreClockInWithCanLookCount();

    /**
     * 根据id查询打卡记录
     *
     * @param id 主键id
     * @param userId 当前登录用户ID（用于查询收藏状态）
     * @return 打卡记录；无此打卡时返回 null
     * @throws IllegalArgumentException 打卡存在但门店不可用（如已逻辑删除）时抛出，消息为「当前店铺已删除。」，由控制层转为 {@code R.fail}
     */
    StoreClockInVo getStoreClockInById(Integer id, Integer userId);

    /**
     * 打卡记录筛选：年份对应的月份打卡情况、用户打卡涉及的城市列表等。
     * 年、月统计均以 {@code store_clock_in.created_time} 为准。
     *
     * @param userId 用户 id
     * @param year   年份（用于生成 1～12 月是否有打卡）；可为 null，此时 months 为空列表
     * @param city   城市名称（行政区域市）；为空或 null 表示不限城市
     */
    ClockInRecordValidateVo getClockInRecordValidate(Integer userId, Integer year, String city);

    /**
     * 按主键查询删除标记、门店 id 及门店营业状态；无此打卡记录时返回 null。
     */
    StoreClockInDeleteFlagVo getDeleteFlagById(Integer id);

}
