import Ticket from "../../models/Ticket";
import AppError from "../../errors/AppError";
import Contact from "../../models/Contact";
import User from "../../models/User";
import Queue from "../../models/Queue";

import Message from "../../models/Message";
import { userInfo } from "os";

import { Op } from "sequelize";

import { Sequelize } from "sequelize"; 
import moment from 'moment';  
 
import { startOfDay, endOfDay, parseISO, getDate} from "date-fns"; 

//Report by user, startDate, endDate
const ShowTicketReport = async (id: string | number, startDate: string, endDate: string): Promise<Ticket[]> => {   

  const ticket = await Ticket.findAll({ 
    where: {   
      userid: id, 
    //createdAt: {
    //  [Op.between]: [+new Date('2022-01-24').toISOString(), +new Date().toISOString()]
    //},   
      createdAt: {
        [Op.gte]: startDate+' 00:00:00.000000',
        [Op.lte]: endDate  +' 23:59:59.999999'
      } 

  }, 


    attributes: ['id', 'status', 'createdAt', 'updatedAt'],  
    include: [
      {
        model: Message,
        required:true,
        separate: true,
        attributes: ['body', 'read', 'mediaType','fromMe', 'mediaUrl','createdAt'], 
        order: [
          ['createdAt', 'ASC']
        ]  
      }, 
      {
        model: Contact, 
        attributes: ['name', 'number']
      },
      {
        model: User, 
        attributes: ['name', 'email']
      },
      {
        model: Queue, 
        attributes: ['name']
      },
      
    ], 
   
  }); 




/*//Report by user
const ShowTicketReport = async (id: string | number): Promise<Ticket[]> => { 

  const ticket = await Ticket.findAll({ 
    where: {userid: id} ,
    attributes: ['id', 'status', 'createdAt', 'updatedAt'],  
    include: [
      {
        model: Message,
        required:true,
        separate: true,
        attributes: ['body', 'read', 'mediaType','fromMe', 'mediaUrl','createdAt'], 
        order: [
          ['createdAt', 'ASC']
        ]  
      }, 
      {
        model: Contact, 
        attributes: ['name', 'number']
      },
      {
        model: User, 
        attributes: ['name', 'email']
      },
      {
        model: Queue, 
        attributes: ['name']
      },
      
    ], 
   
  }); */
  
  if (!ticket) {
    throw new AppError("ERR_NO_TICKET_FOUND", 404);
  }

  return ticket;
};


// Report all
/*const ShowTicketReport = async (): Promise<Message[]> => {
  
  const ticket = await Message.findAll({
    //raw: true,
    attributes: ['body', 'createdAt', 'ticketId'],
    include: [
      {
        model: Ticket,
        attributes: ['contactid', 'userid', 'queueid', 'status'], 
        include:[
          {
            model: Contact,
            attributes: ['name', 'number']
          },
          {
            model: User,
            attributes: ['name', 'email']
          },
          {
            model: Queue,
            attributes: ['name']
          }
        ],  
      }, 
      
    ],  
    order:   
      ['ticketId', 'createdAt'] 
      
  }); 
  

  if (!ticket) {
    throw new AppError("ERR_NO_TICKET_FOUND", 404);
  }

  return ticket;
};*/

export default ShowTicketReport;