import { getRedis } from '../redis';
import { config } from '../config';
import type { OrderPaymentState } from './orderPaymentTypes';

const TTL = config.checkout.draftTtlSec;

function key(cartSessionId: string): string {
  return `checkout:order:payment:${cartSessionId}`;
}

export async function loadOrderPaymentState(
  cartSessionId: string,
): Promise<OrderPaymentState | null> {
  const raw = await getRedis().get(key(cartSessionId));
  if (!raw) return null;
  return JSON.parse(raw) as OrderPaymentState;
}

export async function saveOrderPaymentState(state: OrderPaymentState): Promise<void> {
  state.updatedAt = new Date().toISOString();
  await getRedis().setex(key(state.cartSessionId), TTL, JSON.stringify(state));
}

export async function ensureOrderPaymentState(cartSessionId: string): Promise<OrderPaymentState> {
  const existing = await loadOrderPaymentState(cartSessionId);
  if (existing) return existing;
  const created: OrderPaymentState = {
    cartSessionId,
    status: 'none',
    updatedAt: new Date().toISOString(),
  };
  await saveOrderPaymentState(created);
  return created;
}
