package com.jeesharp.business.modules.member.service;

import com.jeesharp.business.modules.member.entity.MemberSignInRecord;
import com.jeesharp.framework.pojo.Page;

import java.time.LocalDate;
import java.time.YearMonth;
import java.util.List;

/**
 * 会员签到记录领域服务，负责按日查询与落库（不编排积分发放）。
 *
 * @author jeesharp
 * @since 2026-05-08
 */
public interface MemberSignInRecordService {

    /**
     * 指定自然日是否已签到
     */
    boolean existsOnDate(String memberId, LocalDate signDate);

    /**
     * 累计签到次数（未删除记录数）
     */
    long countByMemberId(String memberId);

    /**
     * 某月已签到的日号列表（1-31）
     */
    List<Integer> listSignedDaysOfMonth(String memberId, YearMonth yearMonth);

    /**
     * 新增签到记录
     */
    void saveRecord(MemberSignInRecord record);

    /**
     * 更新签到记录（如回填实际发放积分）。
     */
    void updateRecord(MemberSignInRecord record);

    /**
     * 当前会员签到记录分页（按签到日倒序）
     */
    Page<MemberSignInRecord> findPageByMember(Page<MemberSignInRecord> page, String memberId);

    /**
     * 当前会员最近签到记录（按签到日倒序，用于小程序积分流水等展示）。
     *
     * @param memberId 会员主键
     * @param limit    最大条数，内部会限制在合理上限内
     */
    List<MemberSignInRecord> listRecentByMember(String memberId, int limit);
}
