$this->id, 'name' => $this->name, 'description' => $this->description, 'product_service' => $this->product_service, 'product_id' => $this->product_id, 'product' => $this->whenLoaded('product', fn () => $this->product?->only(['id', 'name', 'base_price'])), 'channel' => $this->channel, 'start_date' => optional($this->start_date)->toDateString(), 'end_date' => optional($this->end_date)->toDateString(), 'target' => $this->target, 'budget' => $this->budget !== null ? (float) $this->budget : null, 'actual_cost' => $this->actual_cost !== null ? (float) $this->actual_cost : null, 'status' => $this->status, 'sales_script_id' => $this->sales_script_id, 'sales_script' => $this->whenLoaded('salesScript', fn () => $this->salesScript?->only(['id', 'title', 'version', 'is_active'])), 'assigned_agents' => $this->whenLoaded('assignedAgents', fn () => $this->assignedAgents->map->only(['id', 'name'])->values()), 'assigned_supervisors' => $this->whenLoaded('assignedSupervisors', fn () => $this->assignedSupervisors->map->only(['id', 'name'])->values()), 'leads' => $this->whenLoaded('leads'), 'leads_count' => $this->whenCounted('leads'), 'contacted_leads_count' => $this->when(isset($this->contacted_leads_count), (int) $this->contacted_leads_count), 'won_leads_count' => $this->when(isset($this->won_leads_count), (int) $this->won_leads_count), 'won_value' => $this->when(isset($this->won_value_sum), (float) ($this->won_value_sum ?? 0)), 'conversion_rate' => $this->when(isset($this->won_leads_count), $this->leads_count > 0 ? round(($this->won_leads_count / $this->leads_count) * 100, 1) : 0), 'target_progress' => $this->when(isset($this->won_leads_count), $this->target > 0 ? min(100, round(($this->won_leads_count / $this->target) * 100, 1)) : 0), 'cost_per_lead' => $this->when(isset($this->leads_count), $this->leads_count > 0 ? round(((float) ($this->actual_cost ?? 0)) / $this->leads_count, 2) : 0), 'roi' => $this->when(isset($this->won_value_sum), (float) ($this->actual_cost ?? 0) > 0 ? round((((float) ($this->won_value_sum ?? 0) - (float) $this->actual_cost) / (float) $this->actual_cost) * 100, 1) : null), 'created_at' => optional($this->created_at)->toISOString(), 'updated_at' => optional($this->updated_at)->toISOString(), ]; } }