<?php

namespace App\Listeners;

use App\Events\UserUpdated;
use Kreait\Firebase\Contract\Firestore;

class SyncUserToFirestore
{
    protected Firestore $firestore;

    public function __construct(Firestore $firestore)
    {
        $this->firestore = $firestore;
    }

    /**
     * Sincroniza dados do usuário com Firestore, respeitando privacidade e segmentação por papel
     */
    public function handle(UserUpdated $event): void
    {
        $user = $event->user;

        // Garante que apenas campos seguros sejam sincronizados
        $payload = $user->toFirebaseSyncPayload();

        // Adiciona granularidade semântica e rastreabilidade
        $payload['contexto'] = 'user_updated';
        $payload['timestamp'] = now()->timestamp;

        // Segmenta por papel para escuta disciplinada no frontend
        $collection = match ($user->typeUser) {
            'motorista' => 'users_motoristas',
            'cliente' => 'users_clientes',
            default => 'users'
        };

        // Sincroniza com merge para preservar dados não atualizados
        $this->firestore
            ->database()
            ->collection($collection)
            ->document((string) $user->id)
            ->set($payload, ['merge' => true]);
    }
}
