'array', 'priority_rules' => 'array', 'settings' => 'array', 'is_active' => 'boolean', 'is_paused' => 'boolean', ]; } protected static function booted(): void { static::creating(function (self $queue) { $queue->uuid ??= (string) Str::uuid(); }); } public function organization(): BelongsTo { return $this->belongsTo(Organization::class, 'organization_id'); } public function branch(): BelongsTo { return $this->belongsTo(Branch::class, 'branch_id'); } public function department(): BelongsTo { return $this->belongsTo(Department::class, 'department_id'); } public function tickets(): HasMany { return $this->hasMany(Ticket::class, 'service_queue_id'); } public function counters(): BelongsToMany { return $this->belongsToMany(Counter::class, 'queue_counter_service_queue', 'service_queue_id', 'counter_id') ->withPivot('priority'); } /** * shared_pool — any linked service point may pull unassigned waiting tickets. * assigned_only — call-next only returns tickets pre-assigned to that service point. */ public function routingMode(): string { $mode = (string) data_get($this->settings, 'routing_mode', 'shared_pool'); return in_array($mode, ['shared_pool', 'assigned_only'], true) ? $mode : 'shared_pool'; } public function usesAssignedOnlyRouting(): bool { return $this->routingMode() === 'assigned_only'; } }