/* eslint-disable */
/* tslint:disable */
import { Injectable, NgZone } from '@angular/core';
import { ActivatedRoute } from '@angular/router'
import { HttpClient } from '@angular/common/http';
import { environment } from 'src/environments/environment';
import { StorageService } from 'src/app/services/storage.service';
import { AuthConnstants } from 'src/app/config/auth-constants';
import { Tokenn } from '../models/token.model';
import { ModalController, AlertController, AnimationController, Platform } from '@ionic/angular';
import { NavigationExtras, Router } from '@angular/router';
import { ToastService } from '../services/toast.service';
import { BackgroundService } from './background.service';
import { v4 as uuidv4 } from 'uuid';
import { EventTrigger } from '../services/eventTrigger.service';
import { SessionStore } from '../store/session.service';
import { ActionPerformed, PushNotificationSchema, PushNotifications, Token, } from '@capacitor/push-notifications';

@Injectable({
  providedIn: 'root'
})
export class NotificationsService {

  adding: "intervenient" | "CC" = "intervenient";
  folderId: string;
  DataArray = new Array();

  callbacks: {
    type: string,
    funx: Function
    id: string
  }[] = []

  constructor(
    private http: HttpClient,
    private storageService: StorageService,
    private modalController: ModalController,
    public modalCtrl: AlertController,
    private animationController: AnimationController,
    private platform: Platform,
    private router: Router,
    private toastService: ToastService,
    private zone: NgZone,
    private activeroute: ActivatedRoute,
    private eventtrigger: EventTrigger,
    private backgroundservice: BackgroundService,
    /* private fcm: FCM */) {

      this.storageService.get("Notifications").then((value) => {

      }).catch(()=>{

    }).catch(() => {

      this.storageService.store("Notifications", [])
    })

  }

  registerCallback(type: string, funx: Function, object: any = {}) {

    const id = uuidv4()
    this.callbacks.push({ type, funx, id })
    if (!object.hasOwnProperty('desktop') && object['desktop'] != false) {
      this.backgroundservice.registerBackService('Notification', funx, type)
    }

    return id;
  }

  deleteCallback(id) {
    this.callbacks.forEach((e, index) => {
      if (e.id == id) {
        if (index > -1) {
          this.callbacks.splice(index, 1);
        }
      }
    })

  }

  getTokenByUserIdAndId(user, userID) {
    // const geturl = environment.apiURL + 'notifications/user/' + userID;

    // return this.http.get<Tokenn[]>(`${geturl}`);
  }

  requestPermissions() {
    // PushNotifications.requestPermissions().then(result => {
    //   if (result.receive === 'granted') {
    //     // Register with Apple / Google to receive push via APNS/FCM
    //     PushNotifications.register();
    //   } else {
    //     // Show some error
    //   }
    // });
  }

  getAndpostToken(username) {
    // if (this.platform.is('desktop') || this.platform.is('mobileweb')) {
    //   console.log('Notifications not supported')
    // } else {
    //   const geturl = environment.apiURL + 'notifications/token';
    //   PushNotifications.addListener('registration',
    //     (token: Token) => {
    //       console.log('token: ', token.value)
    //       this.storageService.store(username, token.value);
    //       this.storageService.get(username).then(value => {
    //         console.log('STORAGE TOKEN', value)
    //         this.storageService.get(AuthConnstants.USER).then(res => {
    //           console.log('USERID', res);
    //           const headers = { 'Authorization': SessionStore.user.BasicAuthKey };
    //           const body = {
    //             UserId: res.UserId,
    //             TokenId: token.value,
    //             Status: 1,
    //             Service: 1
    //           };

    //           this.http.post<Tokenn>(`${geturl}`, body, { headers }).subscribe(data => {
    //             console.log('TOKEN USER MIDLE', data);
    //           }, (error) => {
    //             console.log('Post token to backend', error)
    //           })
    //         });

    //       });
    //     }
    //   );
    // }

  }

  registrationError() {
    // PushNotifications.addListener('registrationError',
    //   (error: any) => {
    //     console.log('Error on registration: ' + JSON.stringify(error));
    //   }
    // );
  }

  onReciveForeground() {
    // PushNotifications.addListener('pushNotificationReceived',
    //   (notification: PushNotificationSchema) => {
    //     console.log('Push received: ' + JSON.stringify(notification));
    //     this.DataArray.push(notification)
    //     console.log("On ReceiveNotification", this.DataArray)
    //     this.storageService.store("Notifications", this.DataArray)
    //     this.eventtrigger.publishSomeData({
    //       notification: "recive"
    //     })
    //   }
    // );
  }

  onReciveBackground() {
    // PushNotifications.addListener('pushNotificationActionPerformed',
    //   (notification: ActionPerformed) => {
    //     console.log('Push action performed: ' + JSON.stringify(notification));
    //    /*  this.DataArray.push(notification.notification)
    //     console.log("On ReceiveNotification", this.DataArray)
    //     this.storageService.store("Notifications", this.DataArray)
    //     this.eventtrigger.publishSomeData({
    //       notification: "recive"
    //     }) */
    //     this.notificatinsRoutes(notification)
    //   }
    // );
  }

  tempClearArray() {
    this.DataArray = new Array;
  }


  notificatinsRoutes = (notification) => {

    // console.log('Push action performed 2222: ' + JSON.stringify(notification.data));

    // if (notification.notification.data.Service === "agenda" && notification.notification.data.IdObject.length > 10) {
    //   console.log("Id Lenght", notification.notification.data.IdObject.length)
    //   this.zone.run(() => this.router.navigate(['/home/agenda', notification.notification.data.IdObject, 'agenda']));
    // }
    // else if (notification.notification.data.Service === "gabinete-digital" && notification.notification.data.Object === "expediente") {
    //   this.zone.run(() => this.router.navigate(['/home/gabinete-digital/expediente', notification.notification.data.IdObject, 'gabinete-digital']));
    // }
    // else if (notification.notification.data.Service === "agenda" && notification.notification.data.Object === "event-list") {
    //   //this.zone.run(() => this.router.navigate(['/home/gabinete-digital/event-list/approve-event',IdObject, 'agenda']));
    //   this.zone.run(() => this.router.navigate(['/home/agenda/event-list/approve-event', notification.notification.data.IdObject, 'agenda']));

    // } else if (notification.notification.data.Service === "gabinete-digital" && notification.notification.data.Object === "despachos") {

    //   this.zone.run(() => this.router.navigate(['/home/gabinete-digital/despachos', notification.notification.data.IdObject, 'gabinete-digital'], { replaceUrl: true }));
    // }
    // else if (notification.notification.data.Service === "gabinete-digital" && notification.notification.data.Object === "parecer") {

    //   this.zone.run(() => this.router.navigate(['/home/gabinete-digital/pedidos', notification.notification.data.IdObject, 'gabinete-digital']));
    // }
    // else if (notification.notification.data.Service === "gabinete-digital" && notification.notification.data.Object === "deferimento") {

    //   this.zone.run(() => this.router.navigate(['/home/gabinete-digital/pedidos', notification.notification.data.IdObject, 'gabinete-digital']));
    // }
    // else if (notification.notification.data.Service === "gabinete-digital" && notification.notification.data.Object === "despachos-pr") {

    //   this.zone.run(() => this.router.navigate(['/home/gabinete-digital/despachos-pr', notification.notification.data.IdObject, 'gabinete-digital']));
    // }
    // else if (notification.notification.data.Service === "accoes" && notification.notification.data.Object === "accao") {
    //   this.zone.run(() => this.router.navigate(['/home/publications', notification.notification.data.IdObject]));
    // }
    // else if (notification.notification.data.Service === "accoes" && notification.notification.data.Object === "publicacao") {
    //   this.zone.run(() => this.router.navigate(['/home/publications/view-publications', notification.notification.data.FolderId, notification.data.IdObject]));
    // }
    // else if (notification.notification.data.Service === "gabinete-digital" && notification.notification.data.Object === "diplomas") {
    //   this.zone.run(() => this.router.navigate(['/home/gabinete-digital/diplomas', notification.notification.data.IdObject, 'gabinete-digital']));
    // }
    // else if (notification.notification.data.Service === "gabinete-digital" && notification.notification.data.Object === "diplomas-assinar") {

    //   this.zone.run(() => this.router.navigate(['/home/gabinete-digital/diplomas-assinar', notification.notification.data.IdObject, 'gabinete-digital']));
    // }
    // else if (notification.notification.data.Service === "gabinete-digital" && notification.notification.data.Object === "expedientes-pr") {
    //   this.zone.run(() => this.router.navigate(['/home/gabinete-digital/expedientes-pr', notification.notification.data.IdObject, 'gabinete-digital']));
    // }

  }

}
