<?php

declare(strict_types=1);

namespace App\Services;

use App\Enums\RequestPropertyType;
use App\Models\PropertyProposal;

/**
 * § 6.2 — nom automatique à partir de l’objet de la transaction (type, lieu, prix).
 * Exemples document : « Villa avec piscine - Djerba - Budget 900 000 DT » ;
 * format compact demandé produit : « Villa - Djerba - 900 000 DT ».
 */
final class ConversationTitleGenerator
{
    public static function fromProposal(PropertyProposal $proposal): string
    {
        $proposal->loadMissing('city', 'request.city');

        $cityName = $proposal->city?->name
            ?? $proposal->request?->city?->name
            ?? '—';

        $type = $proposal->property_type;
        $value = $type instanceof RequestPropertyType ? $type->value : (string) $type;
        $typeLabel = self::propertyTypeLabel($value);

        $price = (float) ($proposal->price ?? 0);
        $priceFormatted = number_format($price, 0, ',', ' ');

        return sprintf('%s - %s - %s DT', $typeLabel, $cityName, $priceFormatted);
    }

    private static function propertyTypeLabel(string $value): string
    {
        return match ($value) {
            'villa' => 'Villa',
            'maison' => 'Maison',
            'appartement' => 'Appartement',
            'terrain' => 'Terrain',
            'local_commercial' => 'Local commercial',
            'bureau' => 'Bureau',
            default => ucfirst(str_replace('_', ' ', $value)),
        };
    }
}
