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

use app\dice\model\player\DicePlayer;
use app\dice\model\DiceModel;
use plugin\saiadmin\app\model\system\SystemUser;
use think\model\relation\BelongsTo;

/**
 * 玩家钱包流水模型
 *
 * dice_player_wallet_record 玩家钱包流水记录
 *
 * @property  $id ID
 * @property  $player_id 用户id
 * @property  $admin_id 关联玩家所属管理员ID（DicePlayer.admin_id）
 * @property  $coin 平台币变化
 * @property  $type 类型:0=充值 1=提现 2=购买抽奖次数
 * @property  $wallet_before 钱包操作前
 * @property  $wallet_after 钱包操作后
 * @property  $total_ticket_count 总抽奖次数
 * @property  $paid_ticket_count 购买抽奖次数
 * @property  $free_ticket_count 赠送抽奖次数
 * @property  $remark 备注
 * @property  $user_id 操作管理员id（type 3/4 时记录）
 * @property  $create_time 创建时间
 * @property  $update_time 修改时间
 */
class DicePlayerWalletRecord extends DiceModel
{
    /**
     * 数据表主键
     * @var string
     */
    protected $pk = 'id';

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

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

    /**
     * 关联操作管理员（type 3/4 时有值）
     */
    public function operator(): BelongsTo
    {
        return $this->belongsTo(SystemUser::class, 'user_id', 'id');
    }

    /**
     * 类型 搜索
     */
    public function searchTypeAttr($query, $value)
    {
        if ($value !== '' && $value !== null) {
            $query->where('type', '=', $value);
        }
    }

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

    /**
     * 平台币下限 搜索（withSearch 用 Str::studly 故方法名为 searchCoinMinAttr）
     */
    public function searchCoinMinAttr($query, $value)
    {
        if ($value !== '' && $value !== null) {
            $query->where('coin', '>=', $value);
        }
    }

    /**
     * 平台币上限 搜索（withSearch 用 Str::studly 故方法名为 searchCoinMaxAttr）
     */
    public function searchCoinMaxAttr($query, $value)
    {
        if ($value !== '' && $value !== null) {
            $query->where('coin', '<=', $value);
        }
    }

    /**
     * 创建时间起始 搜索
     */
    public function searchCreateTimeMinAttr($query, $value)
    {
        if ($value !== '' && $value !== null) {
            $query->where('create_time', '>=', $value);
        }
    }

    /**
     * 创建时间结束 搜索
     */
    public function searchCreateTimeMaxAttr($query, $value)
    {
        if ($value !== '' && $value !== null) {
            $query->where('create_time', '<=', $value);
        }
    }
}
