package com.haha.service.impl;

import com.haha.service.InviteNotificationService;
import com.haha.service.UserService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

import java.math.BigDecimal;

/**
 * 邀请活动消息通知服务实现类
 * 提供默认的通知实现（日志输出），可根据需要扩展为真实的通知渠道
 * 支持的扩展方式：
 * - 站内信通知
 * - 微信小程序模板消息
 * - 短信通知
 * - APP推送通知
 */
@Slf4j
@Service
@RequiredArgsConstructor
public class InviteNotificationServiceImpl implements InviteNotificationService {

    private final UserService userService;

    // 可以注入其他消息服务（如微信模板消息服务、短信服务等）
    // private final WechatMessageService wechatMessageService;
    // private final SmsService smsService;
    // private final MessageService messageService;

    @Override
    public void sendRewardSuccessNotification(Long userId, String couponName, BigDecimal amount) {
        try {
            log.info("[邀请通知] 准备发送奖励发放成功通知 - userId: {}, couponName: {}, amount: {}",
                     userId, couponName, amount);

            // TODO: 根据实际的消息渠道发送通知

            // 方式1: 站内信（推荐优先使用）
            // messageService.sendSystemMessage(userId, "邀请奖励",
            //     "恭喜！您邀请的好友已完成首单，获得" + couponName + "一张（面值：" + amount + "元）");

            // 方式2: 微信小程序模板消息（需要配置模板ID）
            // Map<String, String> data = new HashMap<>();
            // data.put("thing1", couponName);  // 优惠券名称
            // data.put("amount2", amount.toString());  // 优惠券金额
            // data.put("time3", LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));  // 发放时间
            // wechatMessageService.sendTemplateMessage(userId, templateId, data);

            // 方式3: 短信通知（可选，适用于重要奖励）
            // String phone = userService.getUserPhone(userId);
            // if (phone != null) {
            //     smsService.sendSms(phone, "【哈哈智能售卖机】恭喜您获得" + couponName +
            //         "一张（面值" + amount + "元），已发放至您的账户，请查收。");
            // }

            log.info("[邀请通知] 奖励发放成功通知已发送 - userId: {}", userId);

        } catch (Exception e) {
            log.error("[邀请通知] 发送奖励发放成功通知失败 - userId: {}", userId, e);
        }
    }

    @Override
    public void sendNewInviteeNotification(Long inviterUserId, String inviteeNickname) {
        try {
            log.info("[邀请通知] 准备发送新好友注册通知 - inviterUserId: {}, inviteeNickname: {}",
                     inviterUserId, inviteeNickname);

            // TODO: 发送通知告知邀请人有新用户通过他的邀请注册了

            // 方式1: 站内信
            // messageService.sendSystemMessage(inviterUserId, "新好友加入",
            //     "恭喜！您的好友" + inviteeNickname + " 已通过您的邀请码注册，待对方完成首单后即可获得奖励");

            // 方式2: 微信模板消息
            // Map<String, String> data = new HashMap<>();
            // data.put("thing1", inviteeNickname);  // 新好友昵称
            // data.put("time2", LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));  // 注册时间
            // wechatMessageService.sendTemplateMessage(inviterUserId, templateId, data);

            log.info("[邀请通知] 新好友注册通知已发送 - inviterUserId: {}", inviterUserId);

        } catch (Exception e) {
            log.error("[邀请通知] 发送新好友注册通知失败 - inviterUserId: {}", inviterUserId, e);
        }
    }

    @Override
    public void sendActivityEndingReminder(Long userId, String activityName, int daysLeft) {
        try {
            log.info("[邀请通知] 准备发送活动即将结束提醒 - userId: {}, activityName: {}, daysLeft: {}",
                     userId, activityName, daysLeft);

            // TODO: 发送活动即将结束提醒

            // 方式1: 站内信
            // messageService.sendSystemMessage(userId, "活动即将结束提醒",
            //     "温馨提示：[" + activityName + "]将在" + daysLeft + "天后结束，抓紧时间邀请好友赢取奖励吧！");

            // 方式2: 微信模板消息
            // Map<String, String> data = new HashMap<>();
            // data.put("thing1", activityName);  // 活动名称
            // data.put("number2", String.valueOf(daysLeft));  // 剩余天数
            // wechatMessageService.sendTemplateMessage(userId, templateId, data);

            log.info("[邀请通知] 活动即将结束提醒已发送 - userId: {}", userId);

        } catch (Exception e) {
            log.error("[邀请通知] 发送活动即将结束提醒失败 - userId: {}", userId, e);
        }
    }
}
