import { Component, OnInit } from '@angular/core';
import { Router } from '@angular/router';
import { AlertController, AnimationController, ModalController, NavParams } from '@ionic/angular';
import { Event } from 'src/app/models/event.model'
import { EventBody } from 'src/app/models/eventbody.model';
import { ProcessesService } from 'src/app/services/processes.service';
import { EventPerson } from 'src/app/models/eventperson.model';
import { EventsService } from 'src/app/services/events.service';
import { AttachmentsService } from 'src/app/services/attachments.service';
import { DiscartExpedientModalPage } from 'src/app/pages/gabinete-digital/discart-expedient-modal/discart-expedient-modal.page';
import { AlertService } from 'src/app/services/alert.service';
import { ToastService } from 'src/app/services/toast.service';
import { AttendeesPageModal } from 'src/app/pages/events/attendees/attendees.page';
import { SearchList } from 'src/app/models/search-document';
import { SearchPage } from 'src/app/pages/search/search.page';
import { ThemeService } from 'src/app/services/theme.service'


@Component({
  selector: 'app-delegar',
  templateUrl: './delegar.page.html',
  styleUrls: ['./delegar.page.scss'],
})
export class DelegarPage implements OnInit {
  task: any;
  note:string;
  
  taskParticipants: EventPerson[] = [];
  taskParticipantsCc: EventPerson[] = [];
  
  taskDocId:string;
  loadedAttachments:any;

  adding: "intervenient" | "CC" = "intervenient";

  postData: Event;
  eventBody: EventBody;
  eventAttendees: EventPerson;

  formLocationSatus: boolean = false;
  showAttendees= false;

  hideThisFeature: boolean = true;
  documents: SearchList[] = [];

  constructor(
    private modalController: ModalController,
    private router:Router,
    private navParams: NavParams,
    private processes:ProcessesService,
    private attachmentsService: AttachmentsService,
    private calendarService: EventsService,
    public alertController: AlertController,
    private alertService: AlertService,
    private animationController: AnimationController,
    private toastService: ToastService,
    public ThemeService: ThemeService
    ) {
      this.task = this.navParams.get('task');
      this.postData = new Event();
      this.eventBody = { BodyType : "1", Text : ""};
      this.postData.Body = this.eventBody;

      /* Initialize 'Subject' with the title of the expedient */
      this.postData.Subject = this.task.Folio;
      this.postData.CalendarName = "Oficial";
      /* this.postData.StartDate = new Date(); */
      /* Set + 30minutes to seleted datetime */
      let selectedEndDate = new Date();
     /*  this.postData.EndDate = new Date(selectedEndDate.setMinutes(new Date().getMinutes() + 30)); */

     this.hideThisFeature = this.navParams.get('showAttachmentBtn');
    }

  ngOnInit() {
    this.adding = "intervenient";
    console.log(this.task);
    
  }

  close() {
    this.modalController.dismiss('close');
  }

  cancelTask() {
    this.modalController.dismiss(null);
  }

  async saveTask() {
    if(this.taskParticipants.length < 1){
      this.toastService._badRequest("Selecione um destinatário");
    }
    else if(this.taskParticipants.length > 1){
      this.toastService._badRequest("Selecione apenas um destinatário");
    }
    else {
      let body = {
        "SerialNumber": this.task.SerialNumber,
        "DispatchDocId": this.task.DocId,
        "FolderID": this.task.FolderId || this.task.FolderID,
        "Subject": this.task.Folio,
        "Comment": this.note,
        "DelegatedUserEmail": this.taskParticipants[0].EmailAddress,
      }
      console.log(body);

      const loader = this.toastService.loading()

      this.processes.DelegateTask(body).subscribe(res=>{
        
        console.log(res); 
        this.toastService._successMessage('Processo delegado')
        this.close();
      },
      (error)=>{
        this.toastService._badRequest("Processo não delegado")
      },
      ()=>{
        loader.remove()
      });
    }
  }

  async addParticipants() {
    this.adding = "intervenient";
    if(window.innerWidth <=800) {
      this.showAttendees=false;
      const modal = await this.modalController.create({
        component: AttendeesPageModal,
          componentProps: {
          adding: this.adding,
          taskParticipants: this.taskParticipants,
          taskParticipantsCc: this.taskParticipantsCc
        },
        cssClass: 'modal attendee modal-desktop',
        backdropDismiss: false
      });

      await modal.present();

      modal.onDidDismiss().then((data) => {
        if(data) {
          data = data['data'];
          const newAttendees: EventPerson[] = data['taskParticipants'];
          const newAttendeesCC: EventPerson[] = data['taskParticipantsCc'];
          this.setIntervenient(newAttendees);
          this.setIntervenientCC(newAttendeesCC);
        }
      });
    } else {
      this.showAttendees=true
    }
  }

  async setContact(data:EventPerson[]) {

    if(this.adding == "intervenient"){
      this.taskParticipants = data;
    } else if (this.adding == "CC") {
      
      this.taskParticipantsCc = data;
    }
    
  }

  async setIntervenient(data) {
    this.taskParticipants = data;
  }
  
  async setIntervenientCC(data) {
    this.taskParticipantsCc = data;
  }

  async closeComponent() {
    this.showAttendees = false;
  }

  async distartExpedientModal(){
    const modal = await this.modalController.create({
      component: DiscartExpedientModalPage,
       componentProps: {
         serialNumber: this.task.SerialNumber,
      },
      cssClass: 'discart-expedient-modal',
      backdropDismiss: false
    });

    await modal.present();

    modal.onDidDismiss();
  }
  
  validateFormInputs(){
    let formLocation = this.postData.Location.trim();
    if(!this.postData.Location && formLocation.length <= 0){
      this.formLocationSatus=true;
    }
  }

  dynamicSetIntervenient({taskParticipants}){
    this.taskParticipants = taskParticipants;
  }


  async getDoc() {

    const modal = await this.modalController.create({
      component: SearchPage,
      cssClass: 'modal-width-100-width-background modal',
      componentProps: {
        type: 'AccoesPresidenciais & ArquivoDespachoElect',
        showSearchInput: true,
        select: true
      }
    });
    await modal.present();
      modal.onDidDismiss().then((res)=>{
        if(res){
          const data = res.data;
          this.documents.push(data.selected);
        }
    });

  }

  removeAttachment(index: number){

    this.documents = this.documents.filter( (e, i) =>  index != i);
  }


}