package com.ssyf.task.service;

import com.ssyf.module.robot.domain.entity.RConfigRelation;
import com.ssyf.module.robot.domain.entity.RRobotAccount;
import com.ssyf.module.robot.domain.entity.RRunningConfig;
import com.ssyf.third.bmiss.model.GiftDetail;
import com.ssyf.third.bmiss.model.LiveRoom;
import com.ssyf.third.bmiss.model.UserInfo;

import java.time.LocalDateTime;

/**
 * 机器人记录管理服务接口
 * 定义机器人全生命周期的日志记录、消费记录及状态更新规范
 *
 * @author system
 * @since 1.0
 */
public interface RobotRecordService {

    /**
     * 记录机器人通用运行日志（动作、结果、状态）
     *
     * @param liveRoom       当前直播间（可为null）
     * @param robotAccount   机器人账号
     * @param configRelation 配置关系
     * @param runningConfig  运行策略配置
     * @param userInfo       第三方用户信息
     * @param actionType     动作类型（如：LOGIN, ENTER, GIFT）
     * @param actionDesc     动作描述
     * @param result         执行结果/错误信息
     * @param executeStatus  执行状态（2-失败/异常, 4-成功）
     */
    void recordRobotRunRecord(LiveRoom liveRoom, RRobotAccount robotAccount, RConfigRelation configRelation,
                              RRunningConfig runningConfig, UserInfo userInfo,
                              String actionType, String actionDesc, String result, Integer executeStatus);

    /**
     * 记录机器人礼物消费详情
     *
     * @param liveRoom       直播间信息
     * @param robotAccount   机器人账号
     * @param configRelation 配置关系
     * @param runningConfig  运行策略
     * @param userInfo       用户信息
     * @param giftDetail     礼物元数据
     * @param count          赠送数量
     */
    void recordRobotConsumption(LiveRoom liveRoom, RRobotAccount robotAccount, RConfigRelation configRelation,
                                RRunningConfig runningConfig, UserInfo userInfo, GiftDetail giftDetail, int count);

    /**
     * 更新机器人实时运行状态（在线/离线/所在房间）
     *
     * @param liveRoom       直播间信息（进入房间时传入，否则为null）
     * @param robotAccount   机器人账号
     * @param configRelation 配置关系
     * @param runningConfig  运行策略
     * @param userInfo       用户信息
     */
    void recordRobotRunningInfo(LiveRoom liveRoom, RRobotAccount robotAccount, RConfigRelation configRelation,
                                RRunningConfig runningConfig, UserInfo userInfo);

    /**
     * 记录任务执行耗时（用于性能监控）
     */
    void recordTaskExecutionTime(String taskName, long executionTime);

    /**
     * 记录任务执行失败次数（用于监控告警）
     */
    void recordTaskExecutionFailure(String taskName, long executionTime);

    /**
     * 机器人退出直播间后的状态清理
     *
     * @param robotAccount      机器人账号
     * @param roomId            退出前的房间ID
     * @param enterLiveRoomTime 进入房间的时间（用于计算停留时长）
     */
    void updateRobotRunningInfoAfterQuit(RRobotAccount robotAccount, Integer roomId, LocalDateTime enterLiveRoomTime);
}