import { DEFAULT_CHARACTER_ID } from "@/data/constants/character";
import type { PrivateAlbum } from "@/data/schemas/private-zone";
import type { PaymentGuidance } from "@/data/schemas/chat";

export interface PrivateZoneUnlockPaywallRequest {
  albumId: string;
  reason: string;
  requiredCredits: number;
  currentCredits: number;
  shortfallCredits: number;
  paymentGuidance?: PaymentGuidance | null;
}

export interface PrivateZoneState {
  characterId: string;
  items: readonly PrivateAlbum[];
  creditBalance: number;
  pendingImageCount: number;
  hasIncompleteContent: boolean;
  errorMessage: string | null;
  unlockingAlbumId: string | null;
  unlockErrorMessage: string | null;
  pendingConfirmAlbumId: string | null;
  unlockPaywallRequest: PrivateZoneUnlockPaywallRequest | null;
  unlockSuccessNonce: number;
}

export function createInitialPrivateZoneState(
  characterId: string,
): PrivateZoneState {
  return {
    characterId,
    items: [],
    creditBalance: 0,
    pendingImageCount: 0,
    hasIncompleteContent: false,
    errorMessage: null,
    unlockingAlbumId: null,
    unlockErrorMessage: null,
    pendingConfirmAlbumId: null,
    unlockPaywallRequest: null,
    unlockSuccessNonce: 0,
  };
}

export const initialState = createInitialPrivateZoneState(DEFAULT_CHARACTER_ID);
