import dayjs from "@/utils/dayjs";
import { faker } from "@faker-js/faker";
import axios from "axios";
import { useAuthStore } from "@/stores/auth";

const API_API = import.meta.env.VITE_APP_API;
const authStore = useAuthStore();

export interface Contact {
  id: string;
  room_id : string;
  name: string;
  jobTitle: string;
  avatar: string;
  online: boolean;
  lastDate: Date;
  lastDateText: string;
  lastMessage: string;
}

export interface MessagesGroup {
  id: string;
  isMine: boolean;
  userId: string;
  userObj: Contact;
  messages: {
    text: string;
  }[];
  date: Date;
}

export type Conversation = MessagesGroup[];

export interface Chat {
  id: string;
  userId: string;
  userObj: Contact;
  conversation: Conversation;
  lastDate: Date;
}

export const getData = async () => {
  const contacts: Contact[] = [];
  const chat: Chat[] = [];

  const contactsResponse = await axios.get(API_API + '/customers/rooms/all', {
    headers: {
      Accept: 'application/json',
      Authorization: `Bearer ${authStore.user.token}`,
    },
  });

  const apiContacts = contactsResponse.data.data.Rooms;

  apiContacts.forEach((apiContact: any) => {
    const contact: Contact = {
      id: apiContact.room_id,
      room_id : apiContact.room_id,
      name: apiContact.name,
      jobTitle: faker.person.jobTitle(),
      avatar: faker.image.avatarGitHub(),
      online: false,
      lastDate: dayjs(apiContact.time).toDate(),
      lastDateText: "",
      lastMessage: apiContact.message,
    };
    
    
   console.log('aa : ' , contact)

    contacts.push(contact);


  });


  // const me: Contact = contacts.pop() as Contact;

  const me = {
    id: 0,
    name: 'Messi',
    jobTitle: faker.person.jobTitle(),
    avatar: faker.image.avatarGitHub(),
    online: false,
  };

  for (const user of contacts) {
    const conversation: MessagesGroup[] = [];

    const messagesResponse = await axios.get(API_API + '/Conversations/' + user.room_id, {
      headers: {
        Accept: 'application/json',
        Authorization: `Bearer ${authStore.user.token}`,
      },
    });

    const apiMessages = messagesResponse.data.data.Conversations;


    apiMessages.forEach((apiMessage: any) => {

      const isMine = apiMessage.send == 0;
      const userObj = isMine ? me : user;
      const userId = userObj.id;

      conversation.push({
        id: apiMessage.id,
        isMine,
        userId,
        userObj,
        messages: [{ text: apiMessage.message }],
        date: dayjs(apiMessage.time).toDate(),
      });
    });

    const conversationSorted = conversation.sort((a, b) => a.date.getTime() - b.date.getTime());
    const lastDate = conversationSorted[conversation.length - 1].date;
    const lastMessage = conversationSorted[conversation.length - 1].messages[0].text;

    chat.push({
      id: user.id,
      userId: user.id,
      userObj: user,
      conversation: conversationSorted,
      lastDate,
    });

    user.lastDate = lastDate;
    user.lastDateText =
      dayjs(lastDate).format("YYYY-MM-DD") === dayjs().format("YYYY-MM-DD")
        ? dayjs(lastDate).format("HH:mm")
        : dayjs(lastDate).format("D MMM");
    user.lastMessage = lastMessage;
  }

  return {
    contacts: contacts.sort((a, b) => b.lastDate.getTime() - a.lastDate.getTime()),
    chat: chat.sort((a, b) => b.lastDate.getTime() - a.lastDate.getTime()),
    me
  };
};