import { Message } from './types';

// Base de données mock des messages par conversation
export const mockMessages: Record<number, Message[]> = {
  // Conversation 1 - Groupe Développement
  1: [
    {
      id: 1,
      conversationId: 1,
      senderId: 5, // Pierre
      text: "Salut tout le monde ! Comment ça va ?",
      time: "14:25",
      timestamp: Date.now() - 35 * 60 * 1000,
      isRead: true
    },
    {
      id: 2,
      conversationId: 1,
      senderId: 1, // Vous
      text: "Ça va bien merci ! Et toi ?",
      time: "14:26",
      timestamp: Date.now() - 34 * 60 * 1000,
      isRead: true
    },
    {
      id: 3,
      conversationId: 1,
      senderId: 5, // Pierre
      text: "Super ! J'ai fini l'interface de chat",
      time: "14:27",
      timestamp: Date.now() - 33 * 60 * 1000,
      isRead: true
    },
    {
      id: 4,
      conversationId: 1,
      senderId: 1, // Vous
      text: "Génial ! Tu peux me montrer ?",
      time: "14:28",
      timestamp: Date.now() - 32 * 60 * 1000,
      isRead: true
    },
    {
      id: 5,
      conversationId: 1,
      senderId: 5, // Pierre
      text: "Bien sûr ! Je t'envoie des screenshots",
      time: "14:30",
      timestamp: Date.now() - 30 * 60 * 1000,
      isRead: false
    },
    {
      id: 6,
      conversationId: 1,
      senderId: 2, // Marie
      text: "J'ai hâte de voir ça !",
      time: "14:31",
      timestamp: Date.now() - 29 * 60 * 1000,
      isRead: false
    },
    {
      id: 7,
      conversationId: 1,
      senderId: 4, // Sophie
      text: "Pareil ! 🎉",
      time: "14:32",
      timestamp: Date.now() - 28 * 60 * 1000,
      isRead: false
    }
  ],
  
  // Conversation 2 - Marie Dubois
  2: [
    {
      id: 8,
      conversationId: 2,
      senderId: 1, // Vous
      text: "Salut Marie ! J'ai terminé la fonction que tu m'as demandée",
      time: "13:30",
      timestamp: Date.now() - 90 * 60 * 1000,
      isRead: true
    },
    {
      id: 9,
      conversationId: 2,
      senderId: 2, // Marie
      text: "Oh super ! Je peux voir le code ?",
      time: "13:35",
      timestamp: Date.now() - 85 * 60 * 1000,
      isRead: true
    },
    {
      id: 10,
      conversationId: 2,
      senderId: 1, // Vous
      text: "Oui, je te l'envoie tout de suite",
      time: "13:40",
      timestamp: Date.now() - 80 * 60 * 1000,
      isRead: true
    },
    {
      id: 11,
      conversationId: 2,
      senderId: 2, // Marie
      text: "Merci pour le code !",
      time: "13:45",
      timestamp: Date.now() - 75 * 60 * 1000,
      isRead: true
    }
  ],
  
  // Conversation 3 - Équipe Marketing
  3: [
    {
      id: 12,
      conversationId: 3,
      senderId: 6, // Emma
      text: "Bonjour à tous !",
      time: "12:00",
      timestamp: Date.now() - 140 * 60 * 1000,
      isRead: true
    },
    {
      id: 13,
      conversationId: 3,
      senderId: 7, // Lucas
      text: "Salut Emma !",
      time: "12:10",
      timestamp: Date.now() - 130 * 60 * 1000,
      isRead: true
    },
    {
      id: 14,
      conversationId: 3,
      senderId: 6, // Emma
      text: "Réunion demain à 10h",
      time: "12:20",
      timestamp: Date.now() - 120 * 60 * 1000,
      isRead: false
    }
  ],
  
  // Conversation 4 - Jean Martin
  4: [
    {
      id: 15,
      conversationId: 4,
      senderId: 3, // Jean
      text: "Tu es disponible demain ?",
      time: "11:00",
      timestamp: Date.now() - 200 * 60 * 1000,
      isRead: true
    },
    {
      id: 16,
      conversationId: 4,
      senderId: 1, // Vous
      text: "Oui, à quelle heure ?",
      time: "11:10",
      timestamp: Date.now() - 190 * 60 * 1000,
      isRead: true
    },
    {
      id: 17,
      conversationId: 4,
      senderId: 3, // Jean
      text: "Parfait, on se voit demain",
      time: "11:15",
      timestamp: Date.now() - 185 * 60 * 1000,
      isRead: true
    }
  ],
  
  // Conversation 5 - Groupe Projet OwaHub
  5: [
    {
      id: 18,
      conversationId: 5,
      senderId: 2, // Marie
      text: "Comment avance le projet ?",
      time: "10:00",
      timestamp: Date.now() - 260 * 60 * 1000,
      isRead: true
    },
    {
      id: 19,
      conversationId: 5,
      senderId: 5, // Pierre
      text: "Très bien ! On a presque fini le chat",
      time: "10:15",
      timestamp: Date.now() - 245 * 60 * 1000,
      isRead: true
    },
    {
      id: 20,
      conversationId: 5,
      senderId: 4, // Sophie
      text: "L'interface est superbe !",
      time: "10:30",
      timestamp: Date.now() - 230 * 60 * 1000,
      isRead: false
    },
    {
      id: 21,
      conversationId: 5,
      senderId: 6, // Emma
      text: "Bravo à toute l'équipe ! 👏",
      time: "10:35",
      timestamp: Date.now() - 225 * 60 * 1000,
      isRead: false
    },
    {
      id: 22,
      conversationId: 5,
      senderId: 2, // Marie
      text: "On est sur la bonne voie 🚀",
      time: "10:40",
      timestamp: Date.now() - 220 * 60 * 1000,
      isRead: false
    }
  ]
};

// Fonction API mock pour récupérer les messages d'une conversation
export const getMessagesByConversationId = async (conversationId: number): Promise<Message[]> => {
  await new Promise(resolve => setTimeout(resolve, 500));
  return mockMessages[conversationId] || [];
};

// Fonction API mock pour envoyer un message
export const sendMessage = async (
  conversationId: number,
  senderId: number,
  text: string
): Promise<Message> => {
  await new Promise(resolve => setTimeout(resolve, 300));
  
  if (!mockMessages[conversationId]) {
    mockMessages[conversationId] = [];
  }
  
  const newMessage: Message = {
    id: Math.max(...Object.values(mockMessages).flat().map(m => m.id), 0) + 1,
    conversationId,
    senderId,
    text,
    time: new Date().toLocaleTimeString('fr-FR', { hour: '2-digit', minute: '2-digit' }),
    timestamp: Date.now(),
    isRead: false
  };
  
  mockMessages[conversationId].push(newMessage);
  return newMessage;
};

// Fonction API mock pour marquer les messages comme lus
export const markMessagesAsRead = async (
  conversationId: number,
  userId: number
): Promise<void> => {
  await new Promise(resolve => setTimeout(resolve, 200));
  
  if (mockMessages[conversationId]) {
    mockMessages[conversationId] = mockMessages[conversationId].map(msg => 
      msg.senderId !== userId ? { ...msg, isRead: true } : msg
    );
  }
};

// Fonction API mock pour supprimer un message
export const deleteMessage = async (
  conversationId: number,
  messageId: number
): Promise<boolean> => {
  await new Promise(resolve => setTimeout(resolve, 300));
  
  if (mockMessages[conversationId]) {
    const index = mockMessages[conversationId].findIndex(m => m.id === messageId);
    if (index !== -1) {
      mockMessages[conversationId].splice(index, 1);
      return true;
    }
  }
  return false;
};

// Fonction API mock pour éditer un message
export const editMessage = async (
  conversationId: number,
  messageId: number,
  newText: string
): Promise<Message | undefined> => {
  await new Promise(resolve => setTimeout(resolve, 300));
  
  if (mockMessages[conversationId]) {
    const message = mockMessages[conversationId].find(m => m.id === messageId);
    if (message) {
      message.text = newText;
      return message;
    }
  }
  return undefined;
};

