'live_rate', 2 => 'slot_rate', 3 => 'lottery_rate', 4 => 'sport_rate', 5 => 'esports_rate', 6 => 'fishing_rate', 7 => 'chess_rate', ]; protected $table = 'agent_profit_commission_profiles'; protected $hidden = []; protected $fillable = [ 'name', 'live_rate', 'slot_rate', 'lottery_rate', 'sport_rate', 'esports_rate', 'fishing_rate', 'chess_rate', 'is_default', ]; protected $casts = [ 'owner_agent_id' => 'integer', 'live_rate' => 'decimal:4', 'slot_rate' => 'decimal:4', 'lottery_rate' => 'decimal:4', 'sport_rate' => 'decimal:4', 'esports_rate' => 'decimal:4', 'fishing_rate' => 'decimal:4', 'chess_rate' => 'decimal:4', 'is_default' => 'integer', ]; public function owner() { return $this->belongsTo(Agent::class, 'owner_agent_id'); } public function agents() { return $this->hasMany(Agent::class, 'profit_commission_profile_id'); } public function isOfficial(): bool { return empty($this->owner_agent_id); } public function isOwnedBy(?int $agentId): bool { return $agentId !== null && (int) $this->owner_agent_id === $agentId; } public static function officialDefaultId(): ?int { $id = static::query()->whereNull('owner_agent_id')->where('is_default', 1)->value('id'); return $id ? (int) $id : null; } public function rateForGameType(int $gameType): string { $field = self::GAME_TYPE_RATE_FIELDS[$gameType] ?? null; return $field ? (string) $this->{$field} : '0.0000'; } public function rateSnapshot(): array { $snapshot = []; foreach (self::RATE_FIELDS as $field) { $snapshot[$field] = (string) $this->{$field}; } return $snapshot; } }