// Local history + latest-result store (browser storage; offline-friendly).
import type { AnalysisResult } from "./electrical";

const KEY = "volta:history:v1";

interface StoredSummary {
  id: string;
  filename: string;
  uploadDate: string;
  totalRows: number;
  anomalyCount: number;
  criticalCount: number;
  warningCount: number;
}

function isBrowser() {
  return typeof window !== "undefined";
}

export function saveResult(result: AnalysisResult): void {
  if (!isBrowser()) return;
  try {
    localStorage.setItem(`volta:result:${result.id}`, JSON.stringify(result));
    const summaries = getHistory();
    const summary: StoredSummary = {
      id: result.id,
      filename: result.filename,
      uploadDate: result.uploadDate,
      totalRows: result.totalRows,
      anomalyCount: result.anomalyCount,
      criticalCount: result.criticalCount,
      warningCount: result.warningCount,
    };
    const next = [summary, ...summaries.filter((s) => s.id !== result.id)].slice(0, 50);
    localStorage.setItem(KEY, JSON.stringify(next));
  } catch (e) {
    console.error("Failed to save result", e);
  }
}

export function getHistory(): StoredSummary[] {
  if (!isBrowser()) return [];
  try {
    return JSON.parse(localStorage.getItem(KEY) ?? "[]");
  } catch {
    return [];
  }
}

export function getResult(id: string): AnalysisResult | null {
  if (!isBrowser()) return null;
  try {
    const raw = localStorage.getItem(`volta:result:${id}`);
    return raw ? (JSON.parse(raw) as AnalysisResult) : null;
  } catch {
    return null;
  }
}

export function deleteResult(id: string): void {
  if (!isBrowser()) return;
  localStorage.removeItem(`volta:result:${id}`);
  const next = getHistory().filter((s) => s.id !== id);
  localStorage.setItem(KEY, JSON.stringify(next));
}

export type { StoredSummary };
