// ── Addon Config Session Models ──

/** Session state machine */
export type SessionStatus =
  | "pending"    // Created, waiting for phone to open
  | "active"     // Phone opened the config page
  | "completed"  // User submitted a configured manifest URL
  | "cancelled"; // User cancelled or session expired

/** Full session record stored in Durable Object */
export interface ConfigSession {
  code: string;
  addonId: string;
  addonName: string;
  baseManifestUrl: string;
  configureUrl: string | null;
  status: SessionStatus;
  configuredManifestUrl: string | null;
  validatedManifestOk: boolean | null;
  validationError: string | null;
  createdAt: number;
  expiresAt: number;
  completedAt: number | null;
  /** Rate-limit: number of poll requests */
  pollCount: number;
}

/** API request to create a session (from Android app) */
export interface CreateSessionRequest {
  addonId: string;
  addonName: string;
  baseManifestUrl: string;
  configureUrl?: string;
}

/** API response for session status (Android polls this) */
export interface SessionStatusResponse {
  code: string;
  addonId: string;
  addonName: string;
  baseManifestUrl: string;
  configureUrl: string | null;
  status: SessionStatus;
  configuredManifestUrl: string | null;
  validatedManifestOk: boolean | null;
  createdAt: number;
  expiresAt: number;
}

/** Request to complete a session (from phone/QR page) */
export interface CompleteSessionRequest {
  configuredManifestUrl: string;
}

/** Validation result after fetching the configured manifest */
export interface ValidationResult {
  valid: boolean;
  error: string | null;
  manifestName: string | null;
}

/** Rate limit state */
export interface RateLimitState {
  tokens: number;
  lastRefill: number;
}
