export const HOME_AI_BUILD_STORAGE_KEY = 'learnitive:pending-home-build';
export const HOME_AI_BUILD_REQUEST_EVENT = 'learnitive:home-ai-build-request';
export const HOME_PROJECT_DIALOG_REQUEST_EVENT = 'learnitive:home-project-dialog-request';

export type HomeAiProjectIntent =
  | 'research-paper'
  | 'essay'
  | 'study-notes'
  | 'literature-review'
  | 'report'
  | 'article'
  | 'thesis'
  | 'dissertation'
  | 'book-chapter'
  | 'proposal'
  | 'lab-report'
  | 'case-study'
  | 'meeting-notes'
  | 'summary'
  | 'study-guide'
  | 'flashcards'
  | 'website'
  | 'react'
  | 'python'
  | 'cpp'
  | 'latex'
  | 'api'
  | 'data'
  | 'document'
  | 'node'
  | 'markdown'
  | 'vue'
  | 'java'
  | 'rust';

export type PendingHomeAiAction = 'build' | 'settings';
export type HomeAiOutputFormat = 'markdown' | 'latex';

export type PendingHomeAiIntent = {
  action: PendingHomeAiAction;
  prompt: string;
  projectIntent?: HomeAiProjectIntent;
  outputFormat?: HomeAiOutputFormat;
  requestedAt: number;
  source: 'home-ai-builder';
};

const MAX_PENDING_AGE_MS = 30 * 60 * 1000;

export function starterIdForHomeAiIntent(intent?: HomeAiProjectIntent): string | undefined {
  switch (intent) {
    case 'website': return 'html-css-js';
    case 'react': return 'react-vite';
    case 'python': return 'python';
    case 'cpp': return 'cpp';
    case 'latex': return 'latex';
    case 'api': return 'express';
    case 'data': return 'python';
    case 'node': return 'node';
    case 'vue': return 'vue-vite';
    case 'java': return 'java';
    case 'rust': return 'rust';
    case 'research-paper':
    case 'essay':
    case 'study-notes':
    case 'literature-review':
    case 'report':
    case 'article':
    case 'thesis':
    case 'dissertation':
    case 'book-chapter':
    case 'proposal':
    case 'lab-report':
    case 'case-study':
    case 'meeting-notes':
    case 'summary':
    case 'study-guide':
    case 'flashcards':
    case 'document':
    case 'markdown':
      return 'markdown';
    default: return undefined;
  }
}

export function savePendingHomeAiIntent(intent: PendingHomeAiIntent): void {
  if (typeof window === 'undefined') return;
  try { window.sessionStorage.setItem(HOME_AI_BUILD_STORAGE_KEY, JSON.stringify(intent)); } catch { /* short-lived handoff state is best-effort */ }
}

export function readPendingHomeAiIntent(): PendingHomeAiIntent | undefined {
  if (typeof window === 'undefined') return undefined;
  try {
    const raw = window.sessionStorage.getItem(HOME_AI_BUILD_STORAGE_KEY);
    if (!raw) return undefined;
    const parsed = JSON.parse(raw) as Partial<PendingHomeAiIntent>;
    if (parsed.source !== 'home-ai-builder' || (parsed.action !== 'build' && parsed.action !== 'settings')) return undefined;
    const requestedAt = Number(parsed.requestedAt);
    if (!Number.isFinite(requestedAt) || Date.now() - requestedAt > MAX_PENDING_AGE_MS) {
      window.sessionStorage.removeItem(HOME_AI_BUILD_STORAGE_KEY);
      return undefined;
    }
    return {
      action: parsed.action,
      prompt: typeof parsed.prompt === 'string' ? parsed.prompt : '',
      ...(typeof parsed.projectIntent === 'string' ? { projectIntent: parsed.projectIntent as HomeAiProjectIntent } : {}),
      ...(parsed.outputFormat === 'markdown' || parsed.outputFormat === 'latex' ? { outputFormat: parsed.outputFormat } : {}),
      requestedAt,
      source: 'home-ai-builder',
    };
  } catch { return undefined; }
}

export function clearPendingHomeAiIntent(): void {
  if (typeof window === 'undefined') return;
  try { window.sessionStorage.removeItem(HOME_AI_BUILD_STORAGE_KEY); } catch { /* no-op */ }
}

export function requestHomeAiBuild(intent: PendingHomeAiIntent): void {
  if (typeof window === 'undefined') return;
  window.dispatchEvent(new CustomEvent<PendingHomeAiIntent>(HOME_AI_BUILD_REQUEST_EVENT, { detail: intent }));
}

export function requestHomeProjectDialog(): void {
  if (typeof window === 'undefined') return;
  window.dispatchEvent(new Event(HOME_PROJECT_DIALOG_REQUEST_EVENT));
}
