import type { UiMessage } from "@/data/dto/chat";
import type { PendingChatUnlockKind } from "@/lib/navigation/chat_unlock_session";

export type ChatUpgradeReason = "insufficient_credits";

export interface ChatUnlockPaywallRequest {
  messageId: string;
  kind: PendingChatUnlockKind;
  reason: string;
  creditBalance: number;
  requiredCredits: number;
  shortfallCredits: number;
}

export interface ChatState {
  messages: UiMessage[];
  isReplyingAI: boolean;
  pendingReplyCount: number;
  upgradePromptVisible: boolean;
  upgradeReason: ChatUpgradeReason | null;
  canSendMessage: boolean;
  cannotSendReason: string | null;
  creditBalance: number;
  creditsCharged: number;
  requiredCredits: number;
  shortfallCredits: number;
  isLoadingMore: boolean;
  hasMore: boolean;
  historyOffset: number;
  /** history 首屏可展示标志（本地快照加载完成即可进入 ready）
   * - 网络历史加载完成后会再次刷新消息列表
   * - 不被 `loadMoreHistoryActor` 设置（翻页是另一码事）
   */
  historyLoaded: boolean;
  paymentUnlockPending: boolean;
  unlockHistoryPromptVisible: boolean;
  lockedHistoryCount: number;
  isUnlockingHistory: boolean;
  unlockHistoryError: string | null;
  isUnlockingMessage: boolean;
  unlockingMessageId: string | null;
  unlockingMessageKind: PendingChatUnlockKind | null;
  unlockMessageError: string | null;
  unlockPaywallRequest: ChatUnlockPaywallRequest | null;
}

export const initialState: ChatState = {
  messages: [],
  isReplyingAI: false,
  pendingReplyCount: 0,
  upgradePromptVisible: false,
  upgradeReason: null,
  canSendMessage: true,
  cannotSendReason: null,
  creditBalance: 0,
  creditsCharged: 0,
  requiredCredits: 0,
  shortfallCredits: 0,
  isLoadingMore: false,
  hasMore: true,
  historyOffset: 0,
  historyLoaded: false,
  paymentUnlockPending: false,
  unlockHistoryPromptVisible: false,
  lockedHistoryCount: 0,
  isUnlockingHistory: false,
  unlockHistoryError: null,
  isUnlockingMessage: false,
  unlockingMessageId: null,
  unlockingMessageKind: null,
  unlockMessageError: null,
  unlockPaywallRequest: null,
};
