<?php

namespace App\Settlement\Service;

use App\Auth\Entity\User;
use App\Representation\Repository\RepresentationRepository;
use App\UserProfile\Repository\UserProfileRepository;

/**
 * شبای تأییدشدهٔ یک کاربر، مستقل از نقشش.
 *
 * تسویه پیش‌تر فقط شبای نماینده را می‌شناخت، پس هر نقش دیگری (منشی، …) با وجود
 * موجودی کیف پول نمی‌توانست برداشت کند. ترتیب: نماینده (سازگاری با داده‌ی موجود)،
 * سپس پروفایل کاربر.
 */
class UserIbanResolver
{
    public function __construct(
        private readonly RepresentationRepository $representationRepo,
        private readonly UserProfileRepository    $profileRepo,
    ) {}

    /** @return array<string, mixed>|null */
    public function findVerifiedIban(User $user, string $ibanId): ?array
    {
        return $this->representationRepo->findByUser($user)?->findVerifiedIban($ibanId)
            ?? $this->profileRepo->findByUser($user)?->findVerifiedIban($ibanId);
    }

    /** @return array<int, array<string, mixed>> همهٔ شباهای کاربر (تأییدشده و نشده) */
    public function ibansOf(User $user): array
    {
        $representationIbans = $this->representationRepo->findByUser($user)?->getIbans() ?? [];

        return $representationIbans !== []
            ? $representationIbans
            : ($this->profileRepo->findByUser($user)?->getIbans() ?? []);
    }
}
