<?php
// +----------------------------------------------------------------------
// | saiadmin [ saiadmin快速开发框架 ]
// +----------------------------------------------------------------------
// | Author: your name
// +----------------------------------------------------------------------
namespace app\dice\model\play_record;

use app\dice\model\lottery_config\DiceLotteryConfig;
use app\dice\model\player\DicePlayer;
use app\dice\model\reward_config\DiceRewardConfig;
use plugin\saiadmin\basic\think\BaseModel;
use think\model\relation\BelongsTo;

/**
 * 玩家抽奖记录模型
 *
 * dice_play_record 玩家抽奖记录
 *
 * @property  $id ID
 * @property  $player_id 玩家id
 * @property  $lottery_config_id 彩金池配置
 * @property  $lottery_type 抽奖类型
 * @property  $is_win 中奖
 * @property  $win_coin 赢取平台币
 * @property  $reward_config_id 奖励配置id
 * @property  $lottery_id 奖池
 * @property  $lottery_name 奖池名
 * @property  $create_time 创建时间
 * @property  $update_time 修改时间
 */
class DicePlayRecord extends BaseModel
{
    /**
     * 数据表主键
     * @var string
     */
    protected $pk = 'id';

    /**
     * 数据库表名称
     * @var string
     */
    protected $table = 'dice_play_record';

    /**
     * 玩家
     * 关联模型 dicePlayer
     */
    public function dicePlayer(): BelongsTo
    {
        return $this->belongsTo(DicePlayer::class, 'player_id', 'id');
    }

    /**
     * 中奖配置
     * 关联模型 diceRewardConfig
     */
    public function diceRewardConfig(): BelongsTo
    {
        return $this->belongsTo(DiceRewardConfig::class, 'reward_config_id', 'id');
    }

    /**
     * 彩金配置
     * 关联模型 diceLotteryConfig
     */
    public function diceLotteryConfig(): BelongsTo
    {
        return $this->belongsTo(DiceLotteryConfig::class, 'lottery_config_id', 'id');
    }

    /** 按玩家用户名模糊（dicePlayer.username） */
    public function searchUsernameAttr($query, $value)
    {
        if ($value === '' || $value === null) {
            return;
        }
        $ids = DicePlayer::where('username', 'like', '%' . $value . '%')->column('id');
        if (!empty($ids)) {
            $query->whereIn('player_id', $ids);
        } else {
            $query->whereRaw('1=0');
        }
    }

    /** 按彩金池配置名称模糊（diceLotteryConfig.name） */
    public function searchLotteryConfigNameAttr($query, $value)
    {
        if ($value === '' || $value === null) {
            return;
        }
        $ids = DiceLotteryConfig::where('name', 'like', '%' . $value . '%')->column('id');
        if (!empty($ids)) {
            $query->whereIn('lottery_config_id', $ids);
        } else {
            $query->whereRaw('1=0');
        }
    }

    /** 抽奖类型 */
    public function searchLotteryTypeAttr($query, $value)
    {
        if ($value !== '' && $value !== null) {
            $query->where('lottery_type', '=', $value);
        }
    }

    /** 中奖 */
    public function searchIsWinAttr($query, $value)
    {
        if ($value !== '' && $value !== null) {
            $query->where('is_win', '=', $value);
        }
    }

    /** 赢取平台币下限 */
    public function searchWinCoinMinAttr($query, $value)
    {
        if ($value !== '' && $value !== null) {
            $query->where('win_coin', '>=', $value);
        }
    }

    /** 赢取平台币上限 */
    public function searchWinCoinMaxAttr($query, $value)
    {
        if ($value !== '' && $value !== null) {
            $query->where('win_coin', '<=', $value);
        }
    }

    /** 按奖励配置前端显示文本模糊（diceRewardConfig.ui_text） */
    public function searchRewardUiTextAttr($query, $value)
    {
        if ($value === '' || $value === null) {
            return;
        }
        $ids = DiceRewardConfig::where('ui_text', 'like', '%' . $value . '%')->column('id');
        if (!empty($ids)) {
            $query->whereIn('reward_config_id', $ids);
        } else {
            $query->whereRaw('1=0');
        }
    }

    /** 按奖励档位（diceRewardConfig.tier，中奖名 T1-T5） */
    public function searchRewardTierAttr($query, $value)
    {
        if ($value === '' || $value === null) {
            return;
        }
        $ids = DiceRewardConfig::where('tier', '=', $value)->column('id');
        if (!empty($ids)) {
            $query->whereIn('reward_config_id', $ids);
        } else {
            $query->whereRaw('1=0');
        }
    }
}
