import { Component, OnInit } from '@angular/core';
import { NavigationStart, Router } from '@angular/router';
import { LoginUserRespose } from 'src/app/models/user.model';
import { AuthService } from 'src/app/services/auth.service';
import { ProcessesService } from 'src/app/services/processes.service';
import { removeDuplicate } from 'src/plugin/removeDuplicate.js';
import { SqliteService } from '../../../services/sqlite.service';
import { Platform } from '@ionic/angular';
import { SortService } from 'src/app/services/functions/sort.service';
import { ThemeService } from 'src/app/services/theme.service'


@Component({
  selector: 'app-all-processes',
  templateUrl: './all-processes.page.html',
  styleUrls: ['./all-processes.page.scss'],
})
export class AllProcessesPage implements OnInit {

  skeletonLoader = true;
  allProcessesList: any[] = [];
  loggeduser: LoginUserRespose;

  constructor(
    private processesService: ProcessesService,
    private router: Router,
    private authService: AuthService,
    private sqliteservice: SqliteService,
    private platform: Platform,
    private sortService: SortService,
    public ThemeService: ThemeService
  ) {
    this.loggeduser = authService.ValidatedUser;
  }

  ngOnInit() {

    this.loadAllProcesses();

      this.router.events.forEach((event) => {
        if (event instanceof NavigationStart && event.url.startsWith('/home/gabinete-digital')) {
          if (window.location.pathname.split('/').length >= 4 && window.location.pathname.startsWith('/home/gabinete-digital')) {
            this.refreshing();
          } else {
            this.loadAllProcesses();
          }
        }
      });
  }

  doRefresh() {

    setTimeout(() => {
      this.loadAllProcesses();
    }, 1000);
  }

  refreshing() {

    setTimeout(() => {
      this.loadAllProcesses();
    }, 1000);
  }

  async loadAllProcesses() {
    let allProcessesList = await this.processesService.GetTasksList("", false).toPromise();
    //console.log(allProcessesList);

    allProcessesList = allProcessesList.filter(element => element.activityInstanceName != 'Conhecimento')

    this.skeletonLoader = true;

    this.allProcessesList = [];

    allProcessesList.forEach(element => {
      let date = new Date(element.taskStartDate);
      date.setMonth(date.getMonth() + 1);

      let task = {
        "SerialNumber": element.serialNumber,
        "Folio": element.workflowInstanceDataFields.Subject,
        "Senders": element.workflowInstanceDataFields.Sender,
        "CreateDate": new Date(element.taskStartDate),
        "DocumentURL": element.workflowInstanceDataFields.ViewerRequest,
        "Remetente": element.workflowInstanceDataFields.Remetente,
        "DocumentsQty": element.totalDocuments,
        "DocId": element.workflowInstanceDataFields.DispatchDocId,
        "FolderID": element.workflowInstanceDataFields.FolderID,
        "WorkflowName": element.workflowDisplayName,
        "activityInstanceName": element.activityInstanceName,
        "Status": element.workflowInstanceDataFields.Status,
        "Agenda": element.workflowInstanceDataFields.Agenda,
        "customDate": this.setFormatDate(new Date(element.workflowInstanceDataFields.StartDate), new Date(element.workflowInstanceDataFields.EndDate), element.workflowInstanceDataFields.IsAllDayEvent),
      }

      this.allProcessesList.push(task);
      this.allProcessesList = removeDuplicate(this.allProcessesList)

      this.allProcessesList = this.sortService.sortDate(this.allProcessesList, 'CreateDate');

    });

    this.skeletonLoader = false;
  }

  sortArrayISODate(myArray: any) {
    return myArray.sort(function (a, b) {
      return (a.CreateDate < b.CreateDate) ? -1 : ((a.CreateDate > b.CreateDate) ? 1 : 0);
    });
  }

  setFormatDate(start: any, end: any, allday: boolean) {
    let customDate;
    /* start = new Date();
    end= new Date("2021-08-04T18:01:04.753Z"); */
    //end = new Date("2021-09-04T18:01:04.753Z");

    const totalSeconds = Math.floor((end - (start)) / 1000);;
    const totalMinutes = Math.floor(totalSeconds / 60);
    const totalHours = Math.floor(totalMinutes / 60);
    const totalDays = Math.floor(totalHours / 24);

    const hours = totalHours - (totalDays * 24);
    const minutes = totalMinutes - (totalDays * 24 * 60) - (hours * 60);
    const seconds = totalSeconds - (totalDays * 24 * 60 * 60) - (hours * 60 * 60) - (minutes * 60);

    let diffDays = totalDays;
    let diffMinutes = minutes;

    if (totalDays == 0) {
      if (allday) {
        customDate = this.getCustomDate(start) + ", " + this.getCustomHours(start) + " (todo dia)";
        console.log(customDate);
        return customDate;
      }
      else {
        //customDate = this.getCustomDate(start)+","+this.getCustomHours(start)+" ("+minutes+" mins)";
        customDate = this.getCustomDate(start) + ", " + this.getCustomHours(start) + " | " + this.getCustomHours(end);
        return customDate;
      }
    }
    else {
      customDate = this.getCustomDate(start) + "," + this.getCustomHours(start) +
        " (termina:" + this.getCustomDate(end) + "," + this.getCustomHours(end) + ")";
      return customDate;
    }
  }

  getCustomDate(thedate: Date) {
    return (thedate.getDay() + 1) + "/" +
      (thedate.getMonth() + 1) + "/" +
      thedate.getFullYear();
  }
  getCustomHours(thedate: Date) {
    return thedate.getHours() + ":" +
      thedate.getMinutes();
  }

  goToProcess(serialNumber: string, workflowName: string, activityName: string) {
    if (workflowName == 'Despacho') {
      if (activityName == 'Tarefa de Despacho' || activityName == 'Concluir Despacho') {
        this.router.navigate(['/home/gabinete-digital/despachos', serialNumber, 'gabinete-digital']);
      }
    }
    else if (workflowName == 'Despacho do Presidente da República') {
      if (activityName == 'Tarefa de Despacho' || activityName == 'Concluir Despacho') {
        this.router.navigate(['/home/gabinete-digital/despachos-pr', serialNumber, 'gabinete-digital']);
      }
      else if (activityName == 'Revisar Diploma' || activityName == 'Assinar Diploma') {
        this.router.navigate(['/home/gabinete-digital/diplomas', serialNumber, 'gabinete-digital']);
      }
      else if (activityName == 'Diploma Assinado') {
        this.router.navigate(['/home/gabinete-digital/diplomas-assinar', serialNumber, 'gabinete-digital']);
      }
    }
    else if (workflowName == 'Pedido de Parecer' || workflowName == 'Pedido de Deferimento') {
      this.router.navigate(['/home/gabinete-digital/pedidos', serialNumber, 'gabinete-digital']);
    }
    else if (workflowName == 'Expediente') {
      this.router.navigate(['/home/gabinete-digital/expediente', serialNumber, 'gabinete-digital']);
    }
    else if (workflowName == 'Expediente' && this.loggeduser.Profile == 'PR') {
      this.router.navigate(['/home/gabinete-digital/expedientes-pr', serialNumber, 'gabinete-digital']);
    }
    else if (workflowName == "Pedido de Parecer do Presidente") {
      this.router.navigate(['/home/gabinete-digital/pedidos', serialNumber, 'gabinete-digital']);
    }
    /* else if (workflowName == "Expediente") {
      this.router.navigate(['/home/gabinete-digital/pedidos',serialNumber,'gabinete-digital']);
    } */
    else if (workflowName == 'Agenda Pessoal PR' || workflowName == 'Agenda Oficial PR' || workflowName == 'Agenda Oficial MDGPR' || workflowName == 'Agenda Pessoal MDGPR') {
      this.router.navigate(['/home/gabinete-digital/event-list/approve-event', serialNumber, 'gabinete-digital']);
    }
    else {
      console.log('cant find page for this task')
    }
  }

}
