import type { ConversionHistoryItem } from '@/types/media';

const HISTORY_KEY = 'convert-ui-history';
const MAX_HISTORY_ITEMS = 10;

/**
 * Get conversion history from localStorage
 */
export function getHistory(): ConversionHistoryItem[] {
  if (typeof window === 'undefined') return [];

  try {
    const stored = localStorage.getItem(HISTORY_KEY);
    if (!stored) return [];

    const history = JSON.parse(stored);
    return Array.isArray(history) ? history : [];
  } catch (error) {
    console.error('Failed to load history:', error);
    return [];
  }
}

/**
 * Add item to conversion history
 */
export function addToHistory(item: Omit<ConversionHistoryItem, 'id' | 'timestamp'>): void {
  if (typeof window === 'undefined') return;

  try {
    const history = getHistory();

    const newItem: ConversionHistoryItem = {
      ...item,
      id: Math.random().toString(36).substring(7),
      timestamp: Date.now(),
    };

    // Add to beginning of array
    history.unshift(newItem);

    // Keep only the latest MAX_HISTORY_ITEMS
    const trimmed = history.slice(0, MAX_HISTORY_ITEMS);

    localStorage.setItem(HISTORY_KEY, JSON.stringify(trimmed));

    // Dispatch custom event for same-page updates
    window.dispatchEvent(new CustomEvent('conversionHistoryUpdated'));
  } catch (error) {
    console.error('Failed to save history:', error);
  }
}

/**
 * Clear all conversion history
 */
export function clearHistory(): void {
  if (typeof window === 'undefined') return;

  try {
    localStorage.removeItem(HISTORY_KEY);
  } catch (error) {
    console.error('Failed to clear history:', error);
  }
}

/**
 * Remove single item from history
 */
export function removeHistoryItem(id: string): void {
  if (typeof window === 'undefined') return;

  try {
    const history = getHistory();
    const filtered = history.filter((item) => item.id !== id);
    localStorage.setItem(HISTORY_KEY, JSON.stringify(filtered));
  } catch (error) {
    console.error('Failed to remove history item:', error);
  }
}

/**
 * Get history item by ID
 */
export function getHistoryItem(id: string): ConversionHistoryItem | undefined {
  const history = getHistory();
  return history.find((item) => item.id === id);
}
