import type { PayChannel } from "@/data/dto/payment";
import type { PaymentAnalyticsContext } from "@/lib/analytics/payment_analytics_context";
import type {
  PendingChatUnlockKind,
  PendingChatPromotion,
  PendingChatUnlockStage,
} from "@/data/storage/navigation";

export type AppSubscriptionType = "vip" | "topup";
export type AppSubscriptionReturnTo = "chat" | null;

export interface OpenSubscriptionInput {
  type: AppSubscriptionType;
  payChannel?: PayChannel;
  returnTo?: AppSubscriptionReturnTo;
  replace?: boolean;
  analytics?: PaymentAnalyticsContext;
}

export interface StartMessageUnlockInput {
  displayMessageId: string;
  messageId?: string;
  kind: PendingChatUnlockKind;
  lockType?: PendingChatPromotion["lockType"];
  clientLockId?: string;
  promotion?: PendingChatPromotion;
  returnUrl: string;
  stage?: PendingChatUnlockStage;
  onAuthenticated: () => void;
}

export interface OpenSubscriptionForPendingUnlockInput {
  displayMessageId: string;
  messageId?: string;
  kind: PendingChatUnlockKind;
  lockType?: PendingChatPromotion["lockType"];
  clientLockId?: string;
  promotion?: PendingChatPromotion;
  returnUrl: string;
  type: AppSubscriptionType;
  payChannel?: PayChannel;
  analytics?: PaymentAnalyticsContext;
}
