<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Booking extends Model
{
    protected $guarded = [];

    protected function casts(): array
    {
        return [
            'date' => 'date',
            'consultation_started_at' => 'datetime',
            'consultation_closed_at' => 'datetime',
            'released_at' => 'datetime',
            'amount' => 'decimal:2',
            'convenience_fee_amount' => 'decimal:2',
            'platform_fee_percentage' => 'decimal:2',
            'platform_fee_amount' => 'decimal:2',
            'professional_net_amount' => 'decimal:2',
        ];
    }

    public function payoutAmount(): float
    {
        return (float) ($this->professional_net_amount ?? $this->amount ?? 0);
    }

    public function client()
    {
        return $this->belongsTo(User::class, 'client_id');
    }

    public function professional()
    {
        return $this->belongsTo(Professional::class);
    }

    public function payout()
    {
        return $this->belongsTo(ProfessionalPayout::class, 'professional_payout_id');
    }

    public function profession()
    {
        return $this->belongsTo(Profession::class);
    }

    public function payments()
    {
        return $this->hasMany(Payment::class);
    }

    public function ratings()
    {
        return $this->hasMany(Rating::class);
    }

    public function attachments()
    {
        return $this->hasMany(BookingAttachment::class);
    }

    public function displayStatus(): string
    {
        if ($this->consultation_closed_at) {
            return 'Completed';
        }

        if ($this->consultation_started_at) {
            return 'In Progress';
        }

        return ucfirst((string) $this->status);
    }
}
