/**
 * Utility functions for managing form data in localStorage
 */

export const STORAGE_KEYS = {
  // DRAFT_LOAN_APPLICATION: 'draftLoanApplication',
  LOAN_APPLICATION_DATA: 'loanApplicationData',
} as const;

/**
 * Save form data to localStorage
 */
export const saveFormData = (key: string, data: any): boolean => {
  try {
    localStorage.setItem(key, JSON.stringify(data));
    return true;
  } catch (error) {
    console.error(`Error saving data to localStorage with key "${key}":`, error);
    return false;
  }
};

/**
 * Load form data from localStorage
 */
export const loadFormData = <T = any>(key: string, defaultValue: T): T => {
  try {
    const savedData = localStorage.getItem(key);
    if (savedData) {
      return JSON.parse(savedData);
    }
  } catch (error) {
    console.error(`Error loading data from localStorage with key "${key}":`, error);
  }
  return defaultValue;
};

/**
 * Remove form data from localStorage
 */
export const removeFormData = (key: string): boolean => {
  try {
    localStorage.removeItem(key);
    return true;
  } catch (error) {
    console.error(`Error removing data from localStorage with key "${key}":`, error);
    return false;
  }
};

/**
 * Check if form data exists in localStorage
 */
export const hasFormData = (key: string): boolean => {
  try {
    return localStorage.getItem(key) !== null;
  } catch (error) {
    console.error(`Error checking localStorage for key "${key}":`, error);
    return false;
  }
};

/**
 * Get all stored form data keys
 */
export const getAllFormDataKeys = (): string[] => {
  try {
    return Object.keys(localStorage).filter(key =>
      Object.values(STORAGE_KEYS).includes(key as any)
    );
  } catch (error) {
    console.error('Error getting localStorage keys:', error);
    return [];
  }
};

/**
 * Clear all form data from localStorage
 */
export const clearAllFormData = (): boolean => {
  try {
    Object.values(STORAGE_KEYS).forEach(key => {
      localStorage.removeItem(key);
    });
    return true;
  } catch (error) {
    console.error('Error clearing all form data:', error);
    return false;
  }
};

/**
 * Convert File objects to a serializable format
 */
export const prepareFilesForStorage = (files: Record<string, File | undefined>) => {
  const serializedFiles: Record<string, any> = {};

  Object.entries(files).forEach(([key, file]) => {
    if (file && file instanceof File) {
      serializedFiles[key] = {
        name: file.name,
        size: file.size,
        type: file.type,
        lastModified: file.lastModified,
        // Note: We don't store the actual file content for auto-save
        // to avoid localStorage size limits and performance issues
        hasFile: true,
      };
    } else {
      serializedFiles[key] = null;
    }
  });

  return serializedFiles;
};

/**
 * Format timestamp for display
 */
export const formatSaveTime = (timestamp?: string | number): string => {
  const date = timestamp ? new Date(timestamp) : new Date();
  return date.toLocaleTimeString('ar-EG', {
    hour: '2-digit',
    minute: '2-digit',
    hour12: false
  });
};
