<?php

/**
 * 文件功能：积分来源活动枚举
 * 集中管理所有合法的 source 标识值，新增活动只需在此加一行常量，数据库字段无需任何变更。
 * 对应数据表：user_currency_logs.source（varchar 字段，非 ENUM，可自由扩展）
 *
 * @author   ChatRoom Laravel
 *
 * @version  1.0.0
 */

namespace App\Enums;

enum CurrencySource: string
{
    /** 自动存点（Horizon 定时任务，每5分钟给在线用户加经验/金币） */
    case AUTO_SAVE = 'auto_save';

    /** 钓鱼收竿奖励（获得经验或金币） */
    case FISHING_GAIN = 'fishing_gain';

    /** 钓鱼抛竿消耗（扣除金币） */
    case FISHING_COST = 'fishing_cost';

    /** 送出礼物（送方扣金币） */
    case SEND_GIFT = 'send_gift';

    /** 收到礼物（收方魅力增加） */
    case RECV_GIFT = 'recv_gift';

    /** 新人礼包（首次登录赠送金币） */
    case NEWBIE_BONUS = 'newbie_bonus';

    /** 商城购买消耗（扣除金币） */
    case SHOP_BUY = 'shop_buy';

    /** 管理员手动调整（后台直接修改经验/金币/魅力） */
    case ADMIN_ADJUST = 'admin_adjust';

    /** 职务奖励（在职管理员通过名片弹窗向用户发放奖励金币） */
    case POSITION_REWARD = 'position_reward';

    /** 每日签到奖励（连续签到按规则发放） */
    case SIGN_IN = 'sign_in';

    /** AI赠送福利（用户向AI祈求获得的随机奖励） */
    case AI_GIFT = 'ai_gift';

    /** 赠人玫瑰（用户或AI对外发放金币红包） */
    case GIFT_SENT = 'gift_sent';

    // ─── 以后新增活动，在这里加一行即可，数据库无需变更 ───────────
    // case TASK_REWARD  = 'task_reward'; // 任务奖励
    // case PVP_WIN      = 'pvp_win';     // PVP 胜利奖励

    // ─── 婚姻系统 ────────────────────────────────────────────────

    /** 结婚魅力加成（双方各获得，由戒指档次决定） */
    case MARRY_CHARM = 'marry_charm';

    /** 离婚魅力惩罚（协议/强制/超时自动）*/
    case DIVORCE_CHARM = 'divorce_charm';

    /** 购买戒指（gold 消耗，由 ShopService 代理） */
    case RING_BUY = 'ring_buy';

    /** 戒指消失记录（求婚被拒/超时，金额=0，仅存档） */
    case RING_LOST = 'ring_lost';

    /** 发送婚礼红包（扣除金币） */
    case WEDDING_ENV_SEND = 'wedding_env_send';

    /** 领取婚礼红包（收入金币） */
    case WEDDING_ENV_RECV = 'wedding_env_recv';

    /** 强制离婚财产转移（付出方为负，接收方为正） */
    case FORCED_DIVORCE_TRANSFER = 'forced_divorce_transfer';

    /** 节日福利红包（管理员设置的定时金币福利） */
    case HOLIDAY_BONUS = 'holiday_bonus';

    /** 百家乐下注消耗（扣除金币） */
    case BACCARAT_BET = 'baccarat_bet';

    /** 百家乐中奖赔付（收入金币，含本金返还） */
    case BACCARAT_WIN = 'baccarat_win';

    /** 百家乐买单活动补偿领取（收入金币） */
    case BACCARAT_LOSS_COVER_CLAIM = 'baccarat_loss_cover_claim';

    /** 星海小博士随机事件（好运/坏运/经验/金币奖惩） */
    case AUTO_EVENT = 'auto_event';

    /** 老虎机转动消耗金币 */
    case SLOT_SPIN = 'slot_spin';

    /** 老虎机中奖赔付（含本金返还） */
    case SLOT_WIN = 'slot_win';

    /** 老虎机诅咒额外扣除 */
    case SLOT_CURSE = 'slot_curse';

    /** 领取礼包红包——金币（用户抢到金币礼包时收入） */
    case RED_PACKET_RECV = 'red_packet_recv';

    /** 领取礼包红包——经验（用户抢到经验礼包时收入） */
    case RED_PACKET_RECV_EXP = 'red_packet_recv_exp';

    /** 神秘箱子——领取奖励（普通箱/稀有箱，正数金币） */
    case MYSTERY_BOX = 'mystery_box';

    /** 神秘箱子——黑化陷阱（倒扣金币，负数） */
    case MYSTERY_BOX_TRAP = 'mystery_box_trap';

    /** 赛马竞猜——下注消耗（扣除金币） */
    case HORSE_BET = 'horse_bet';

    /** 赛马竞猜——中奖赔付（收入金币，含本金返还） */
    case HORSE_WIN = 'horse_win';

    /** 神秘占卜——额外次数消耗（扣除金币） */
    case FORTUNE_COST = 'fortune_cost';

    /** 双色球购票消耗（每注扣除 ticket_price 金币） */
    case LOTTERY_BUY = 'lottery_buy';

    /** 双色球中奖派奖（所有奖级统一用此 source，备注写奖级详情） */
    case LOTTERY_WIN = 'lottery_win';

    /** 五子棋 PvP 对战入场费（PvE 欻入场费） */
    case GOMOKU_ENTRY_FEE = 'gomoku_entry_fee';

    /** 五子棋对战胜利奖励（PvP/PvE 获胜时收入） */
    case GOMOKU_WIN = 'gomoku_win';

    /** 五子棋 PvE 入场费返还（平局时返还） */
    case GOMOKU_REFUND = 'gomoku_refund';

    /** 看视频赚金币与经验奖励 */
    case VIDEO_REWARD = 'video_reward';

    /**
     * 返回该来源的中文名称，用于后台统计展示。
     */
    public function label(): string
    {
        return match ($this) {
            self::AUTO_SAVE => '自动存点',
            self::FISHING_GAIN => '钓鱼奖励',
            self::FISHING_COST => '钓鱼消耗',
            self::SEND_GIFT => '送出礼物',
            self::RECV_GIFT => '收到礼物',
            self::NEWBIE_BONUS => '新人礼包',
            self::SHOP_BUY => '商城购买',
            self::ADMIN_ADJUST => '管理员调整',
            self::POSITION_REWARD => '职务奖励',
            self::SIGN_IN => '每日签到',
            self::AI_GIFT => 'AI赠送',
            self::GIFT_SENT => '发红包',
            self::MARRY_CHARM => '结婚魅力加成',
            self::DIVORCE_CHARM => '离婚魅力惩罚',
            self::RING_BUY => '购买戒指',
            self::RING_LOST => '戒指消失',
            self::WEDDING_ENV_SEND => '发送婚礼红包',
            self::WEDDING_ENV_RECV => '领取婚礼红包',
            self::FORCED_DIVORCE_TRANSFER => '强制离婚财产转移',
            self::HOLIDAY_BONUS => '节日福利',
            self::BACCARAT_BET => '百家乐下注',
            self::BACCARAT_WIN => '百家乐赢钱',
            self::BACCARAT_LOSS_COVER_CLAIM => '百家乐买单活动补偿',
            self::AUTO_EVENT => '随机事件（星海小博士）',
            self::SLOT_SPIN => '老虎机转动',
            self::SLOT_WIN => '老虎机中奖',
            self::SLOT_CURSE => '老虎机诅咒',
            self::RED_PACKET_RECV => '领取礼包红包（金币）',
            self::RED_PACKET_RECV_EXP => '领取礼包红包（经验）',
            self::MYSTERY_BOX => '神秘箱子奖励',
            self::MYSTERY_BOX_TRAP => '神秘箱子陷阱',
            self::HORSE_BET => '赛马下注',
            self::HORSE_WIN => '赛马赢钱',
            self::FORTUNE_COST => '神秘占卜消耗',
            self::LOTTERY_BUY => '双色球购票',
            self::LOTTERY_WIN => '双色球中奖',
            self::GOMOKU_ENTRY_FEE => '五子棋入场费',
            self::GOMOKU_WIN => '五子棋获胜奖励',
            self::GOMOKU_REFUND => '五子棋入场费返还',
            self::VIDEO_REWARD => '看视频奖励',
        };
    }
}
