'array', 'settings' => 'array', 'last_activity_at' => 'datetime', 'total_revenue' => 'decimal:2', 'settings_updated_at' => 'datetime', ]; public function events(): HasMany { return $this->hasMany(Event::class); } public function photos(): HasManyThrough { return $this->hasManyThrough( Photo::class, Event::class, 'tenant_id', 'event_id', 'id', 'id' ); } public function purchases(): HasMany { return $this->hasMany(PackagePurchase::class); } public function tenantPackages(): HasMany { return $this->hasMany(TenantPackage::class); } public function activeResellerPackage(): HasOne { return $this->hasOne(TenantPackage::class)->where('active', true); } public function canCreateEvent(): bool { $package = $this->activeResellerPackage(); if (!$package) { return false; } return $package->canCreateEvent(); } public function incrementUsedEvents(int $amount = 1): bool { $package = $this->activeResellerPackage(); if (!$package) { return false; } $package->increment('used_events', $amount); return true; } public function setSettingsAttribute($value): void { if (is_string($value)) { $this->attributes['settings'] = $value; return; } $this->attributes['settings'] = json_encode($value ?? []); } public function activeSubscription(): Attribute { return Attribute::make( get: fn () => $this->activeResellerPackage() !== null, ); } public function user(): BelongsTo { return $this->belongsTo(User::class); } }