import * as SecureStore from "expo-secure-store";
import type { MobilePrecheckPayload } from "../types/intervention";

const KEY_PREFIX = "cc_precheck_draft_";

export type StoredPrecheckDraft = MobilePrecheckPayload & {
  saved_at: string;
};

function buildKey(interventionId: number): string {
  return `${KEY_PREFIX}${interventionId}`;
}

export async function savePrecheckDraft(
  payload: MobilePrecheckPayload
): Promise<void> {
  const draft: StoredPrecheckDraft = {
    ...payload,
    saved_at: new Date().toISOString(),
  };
  await SecureStore.setItemAsync(buildKey(payload.intervention_id), JSON.stringify(draft));
}

export async function getPrecheckDraft(
  interventionId: number
): Promise<StoredPrecheckDraft | null> {
  const raw = await SecureStore.getItemAsync(buildKey(interventionId));
  if (!raw) {
    return null;
  }

  try {
    const parsed = JSON.parse(raw) as StoredPrecheckDraft;
    if (
      typeof parsed.intervention_id !== "number" ||
      typeof parsed.cerfa_enabled !== "boolean"
    ) {
      return null;
    }
    return parsed;
  } catch {
    return null;
  }
}

export async function clearPrecheckDraft(interventionId: number): Promise<void> {
  await SecureStore.deleteItemAsync(buildKey(interventionId));
}
