import { ChatMessage } from './models';

const STORAGE_KEY = 'chatbot-messages';
const SESSION_ID_KEY = 'chatbot-session-id';

export const chatStorage = {
  save: (messages: ChatMessage[]) => {
    try {
      // Serialize messages with timestamp conversion
      const serializedMessages = messages.map(msg => ({
        ...msg,
        timestamp: msg.timestamp.toISOString()
      }));
      sessionStorage.setItem(STORAGE_KEY, JSON.stringify(serializedMessages));
    } catch (error) {
      console.warn('Failed to save chat history:', error);
    }
  },
  
  load: (): ChatMessage[] => {
    try {
      const stored = sessionStorage.getItem(STORAGE_KEY);
      if (!stored) return [];
      
      const parsed = JSON.parse(stored);
      // Deserialize messages with timestamp conversion
      return parsed.map((msg: any) => ({
        ...msg,
        timestamp: new Date(msg.timestamp)
      }));
    } catch (error) {
      console.warn('Failed to load chat history:', error);
      return [];
    }
  },
  
  clear: () => {
    try {
      sessionStorage.removeItem(STORAGE_KEY);
    } catch (error) {
      console.warn('Failed to clear chat history:', error);
    }
  },

  saveSessionId: (sessionId: string) => {
    try {
      sessionStorage.setItem(SESSION_ID_KEY, sessionId);
    } catch (error) {
      console.warn('Failed to save session ID:', error);
    }
  },

  getSessionId: (): string | null => {
    try {
      return sessionStorage.getItem(SESSION_ID_KEY);
    } catch (error) {
      console.warn('Failed to get session ID:', error);
      return null;
    }
  },

  clearSessionId: () => {
    try {
      sessionStorage.removeItem(SESSION_ID_KEY);
    } catch (error) {
      console.warn('Failed to clear session ID:', error);
    }
  },

  clearAll: () => {
    try {
      sessionStorage.removeItem(STORAGE_KEY);
      sessionStorage.removeItem(SESSION_ID_KEY);
    } catch (error) {
      console.warn('Failed to clear all chat data:', error);
    }
  }
};