<?php

/**
 * 文件功能：用户积分流水 Eloquent 模型
 * 对应表：user_currency_logs
 * 只读写，不允许 update（流水记录不可更改）
 *
 * @author   ChatRoom Laravel
 *
 * @version  1.0.0
 */

namespace App\Models;

use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;

class UserCurrencyLog extends Model
{
    /**
     * 只有 created_at，没有 updated_at（流水记录只写不改）
     */
    public const UPDATED_AT = null;

    /**
     * 允许批量赋值的字段
     */
    protected $fillable = [
        'user_id',
        'username',
        'currency',
        'amount',
        'balance_after',
        'source',
        'remark',
        'room_id',
    ];

    /**
     * 字段类型转换
     */
    protected $casts = [
        'amount' => 'integer',
        'balance_after' => 'integer',
        'room_id' => 'integer',
        'created_at' => 'datetime',
    ];

    // ─── 关联 ─────────────────────────────────────────────────

    /**
     * 关联用户（流水属于哪个用户）
     */
    public function user(): BelongsTo
    {
        return $this->belongsTo(User::class);
    }

    // ─── 作用域（Scope）快捷查询 ──────────────────────────────

    /**
     * 按货币类型过滤
     */
    public function scopeCurrency(Builder $query, string $currency): Builder
    {
        return $query->where('currency', $currency);
    }

    /**
     * 今日数据
     */
    public function scopeToday(Builder $query): Builder
    {
        return $query->whereDate('created_at', today());
    }

    /**
     * 指定日期数据
     */
    public function scopeOnDate(Builder $query, string $date): Builder
    {
        return $query->whereDate('created_at', $date);
    }

    /**
     * 仅正向增加（用于排行榜，不算消耗）
     */
    public function scopeGain(Builder $query): Builder
    {
        return $query->where('amount', '>', 0);
    }

    /**
     * 按来源过滤
     */
    public function scopeSource(Builder $query, string $source): Builder
    {
        return $query->where('source', $source);
    }
}
