<?php

namespace App\Models\Tenant;

use App\Models\Concerns\BelongsToTenant;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;

class Appointment extends Model
{
    use BelongsToTenant;

    public const STATUSES = [
        'scheduled' => 'Programat',
        'arrived' => 'Sosit',
        'done' => 'Finalizat',
        'cancelled' => 'Anulat',
        'no_show' => 'Neprezentat',
    ];

    protected $fillable = [
        'company_id', 'post_id', 'client_id', 'vehicle_id', 'master_id', 'deal_id',
        'date', 'time_start', 'time_end',
        'title', 'color', 'status', 'notes',
    ];

    protected $casts = [
        'date' => 'date',
    ];

    public function post(): BelongsTo
    {
        return $this->belongsTo(Post::class);
    }

    public function client(): BelongsTo
    {
        return $this->belongsTo(Client::class);
    }

    public function vehicle(): BelongsTo
    {
        return $this->belongsTo(Vehicle::class);
    }

    public function master(): BelongsTo
    {
        return $this->belongsTo(User::class, 'master_id');
    }

    public function deal(): BelongsTo
    {
        return $this->belongsTo(Deal::class);
    }

    /** Auto-send confirmation email when a 'scheduled' appointment is created. */
    protected static function booted(): void
    {
        static::created(function (self $a) {
            if ($a->status === 'scheduled') {
                app(\App\Services\NotificationDispatcher::class)->appointmentConfirmed($a);
            }
        });
    }
}
