"use client";

import {
  createPendingChatPromotion as createPromotion,
  NavigationStorage,
  type PendingChatUnlock,
  type PendingChatUnlockKind,
  type PendingChatPromotion,
  type PendingChatPromotionType,
  type PendingChatUnlockStage,
} from "@/data/storage/navigation";

export type {
  PendingChatUnlock,
  PendingChatUnlockKind,
  PendingChatPromotion,
  PendingChatPromotionType,
  PendingChatUnlockStage,
};

export function createPendingChatPromotion(
  promotionType: PendingChatPromotionType,
  characterId: string,
): PendingChatPromotion {
  return createPromotion(promotionType, characterId);
}

export async function savePendingChatUnlock(input: {
  characterId: string;
  displayMessageId?: string;
  messageId?: string;
  kind: PendingChatUnlockKind;
  lockType?: PendingChatUnlock["lockType"];
  clientLockId?: string;
  promotion?: PendingChatPromotion;
  returnUrl: string;
  stage: PendingChatUnlockStage;
}): Promise<void> {
  await NavigationStorage.savePendingChatUnlock(input);
}

export async function consumePendingChatUnlock(
  characterId: string,
): Promise<PendingChatUnlock | null> {
  return NavigationStorage.consumePendingChatUnlock(characterId);
}

export async function peekPendingChatUnlock(
  characterId: string,
): Promise<PendingChatUnlock | null> {
  return NavigationStorage.peekPendingChatUnlock(characterId);
}

export async function hasPendingChatUnlock(characterId: string): Promise<boolean> {
  return NavigationStorage.hasPendingChatUnlock(characterId);
}

export async function clearPendingChatUnlock(): Promise<void> {
  await NavigationStorage.clearPendingChatUnlock();
}

export async function savePendingChatPromotion(
  promotionType: PendingChatPromotionType,
  characterId: string,
): Promise<PendingChatPromotion> {
  return NavigationStorage.savePendingChatPromotion(promotionType, characterId);
}

export async function consumePendingChatPromotion(
  characterId: string,
): Promise<PendingChatPromotion | null> {
  return NavigationStorage.consumePendingChatPromotion(characterId);
}

export async function clearPendingChatPromotion(): Promise<void> {
  await NavigationStorage.clearPendingChatPromotion();
}

export async function clearPendingChatNavigation(): Promise<void> {
  await Promise.all([
    NavigationStorage.clearPendingChatUnlock(),
    NavigationStorage.clearPendingChatPromotion(),
    NavigationStorage.clearPendingChatImageReturn(),
  ]);
}
