package cloud.nstart.terravault.ordinis.notifications.channel;

import java.util.Locale;

/**
 * Канал-агностичная ссылка на recipient'а. Все поля nullable — null = recipient
 * не имеет identifier'а для соответствующего канала → channel skip'ит с
 * {@code SKIPPED_PREF} status.
 *
 * <p>Resolved через {@code RecipientResolver} (Keycloak admin API + cached 5 min).
 *
 * @param userId Keycloak subject (always present)
 * @param email email address (null если у юзера нет email атрибута)
 * @param expressHuid Express HUID UUID string (null если не configured)
 * @param telegramChatId Telegram chat_id numeric string (null если не configured)
 * @param locale предпочитаемая локаль (RU fallback если Keycloak attribute отсутствует)
 */
public record UserRef(
    String userId,
    String email,
    String expressHuid,
    String telegramChatId,
    Locale locale
) {

  /** Shortcut для recipient string per channel — используется как {@code notification_log.recipient}. */
  public String recipientFor(ChannelKind channel) {
    return switch (channel) {
      case EMAIL -> email;
      case EXPRESS -> expressHuid;
      case TELEGRAM -> telegramChatId;
    };
  }
}
