import { Component, ViewChild  } from '@angular/core';
import { Nav,Platform ,Events} from 'ionic-angular';
import { StatusBar } from '@ionic-native/status-bar';
import { SplashScreen } from '@ionic-native/splash-screen';
import { Storage } from '@ionic/storage';
import { OneSignal } from '@ionic-native/onesignal';
import {Myservice} from '../providers/myservice';
import { Geolocation } from '@ionic-native/geolocation';
import { LocationAccuracy } from '@ionic-native/location-accuracy';

@Component({
  templateUrl: 'app.html'
})
export class MyApp {
  @ViewChild(Nav) nav: Nav;
	rootPage:any = 'LandingPage';
	user_data:any;
	open_count:any;
	device_id:any;
	noti_count:any = 0;
	
	constructor(platform: Platform, statusBar: StatusBar, splashScreen: SplashScreen,public events:Events,public storage:Storage,private oneSignal: OneSignal, private myservice: Myservice,private geolocation: Geolocation,private locationAccuracy: LocationAccuracy) {
	 
		events.subscribe('user:notifications', userdetails => {	
			 this.get_noti_count();
		});
		this.storage.get('user_data').then((user_data) => {
			if(user_data){
				this.user_data=user_data;
				 this.get_booking();
				 this.get_noti_count();
			}
		})
		setInterval(() => {
			this.storage.get('user_data').then((user_data) => {
			if(user_data){
				this.user_data=user_data;
				 this.get_booking();
				 this.get_noti_count();
			}
		})
				
		}, 5000);
		platform.ready().then(() => {
			// Okay, so the platform is ready and our plugins are available.
			// Here you can do any higher level native things you might need.
			//statusBar.styleDefault();
			statusBar.hide();
			statusBar.overlaysWebView(true);
			splashScreen.hide();
			
			this.enable_location();
			this.geolocation.getCurrentPosition().then(pos => {
				console.log('lat: ' + pos.coords.latitude + ', lon: ' + pos.coords.longitude);
				console.log(pos);
				this.storage.set('lat_lng', {'lat': pos.coords.latitude ,'lng':pos.coords.longitude});
			});			
			this.triggerNotification();
			platform.registerBackButtonAction(() => {
            // get current active page
            let view = this.nav.getActive();
            if (view.component.name == "ListVehiclePage") {
               /* //Double check to exit app
                if (new Date().getTime() - lastTimeBackPress < timePeriodToExit) {
                    this.platform.exitApp(); //Exit from app
                } else {
                    let toast = this.toastCtrl.create({
                        message:  'Press back again to exit App?',
                        duration: 3000,
                        position: 'bottom'
                    });
                    toast.present();
                    lastTimeBackPress = new Date().getTime();
                } */
            } else {
                // go to previous page
                this.nav.pop({});
            }
        });
		});
			this.storage.get('user_data').then((user_data) => {
			if(user_data){
				this.user_data=user_data;
				 this.get_booking();
			}
		})
		events.subscribe('user:update_profile', userdetails => {	
			console.log("app comp", userdetails);
			if(userdetails !== undefined && userdetails !== ""){
				this.storage.set('user_data', userdetails);
				this.user_data = userdetails;
				console.log("profile", this.user_data);
			}
			else {
				console.log("logout");
				this.storage.remove('user_data');
				this.user_data =  '';
			}
		});
		events.subscribe('user:incomp_read_status', userdetails => {	
			 this.get_booking();
		});
		
		
	}
	
	logout() {
		this.storage.remove('user_data');
		this.events.publish('user:update_profile', '');
		this.nav.setRoot('LoginPage');
	}
	edit_pro(){
		this.nav.setRoot('AddcarPage');
	}
login(){
	this.nav.setRoot('LoginPage');
}
booking(){
	this.nav.setRoot('Booking');
}
home(){
	this.nav.setRoot('ListVehiclePage');
}
schedule(){
	this.nav.setRoot('TimingPage');
}
addoffers(){
	this.nav.setRoot('Addoffers');
}
viewoffers(){
	this.nav.setRoot('Viewoffers');
}
viewservices(){
	this.nav.setRoot('Selected_services');
}



/*location accuracy starts */

	
	enable_location() {
		let options = {
			enableHighAccuracy: true
		};
		this.locationAccuracy.canRequest().then((res: boolean) => {
			if (res) {
				//console.log(this.locationAccuracy.REQUEST_PRIORITY_HIGH_ACCURACY);
				let location_accuracyy = Number(this.locationAccuracy.REQUEST_PRIORITY_HIGH_ACCURACY);
				let location_accuracy = location_accuracyy.toString();
				this.locationAccuracy.request(location_accuracyy).then((loc) => {
					this.geolocation.getCurrentPosition().then(pos => {
						console.log('lat: ' + pos.coords.latitude + ', lon: ' + pos.coords.longitude);
						console.log(pos);
						this.storage.set('latitude', pos.coords.latitude);
						this.storage.set('longitude', pos.coords.longitude);
		
					}).catch((err) => {
						// alert(err);
					})
				}, (error) => {
						//  alert(error); 
					})
			}
		})
	}


/*location accuracy ends */


 /*push notification starts*/

	triggerNotification()
	{

      // Define settings for iOS
      var iosSettings = {};
      iosSettings["kOSSettingsKeyAutoPrompt"] = false;
      iosSettings["kOSSettingsKeyInAppLaunchURL"] = false; 


      // Initialise plugin with OneSignal service
       this.oneSignal.startInit('46d0af64-c191-4ec6-9f29-d8b6232dae8a', '912269327554').iOSSettings(iosSettings);

	  this.oneSignal.registerForPushNotifications();
      // Control how OneSignal notifications will be shown when 
      // one is received while your app is in focus
      this.oneSignal.inFocusDisplaying(this.oneSignal.OSInFocusDisplayOption.None);


      // Retrieve the OneSignal user id and the device token
     this.oneSignal.getIds().then((ids) => {
         console.log('getIds: ' + JSON.stringify(ids));
		 this.device_id =ids;
		 console.log(this.device_id)
		 this.storage.set('get_deviceId',this.device_id);
		// this.myservice.load_post({ device_id:ids },"store_id").subscribe(response => { })
      });


      // When a push notification is received handle 
      // how the application will respond
  this.oneSignal.handleNotificationReceived().subscribe((msg) => {
         // Log data received from the push notification service
         console.log('Notification received');
         console.dir(msg);
      }); 


      // When a push notification is opened by the user
      // handle how the application will respond
    this.oneSignal.handleNotificationOpened().subscribe((msg) => {
         // Log data received from the push notification service
         console.log('Notification opened');
		 console.log(JSON.stringify(msg));
		 if(msg.notification.payload.additionalData.pool_id.type == 'request'){
			var pool_id = msg.notification.payload.additionalData.pool_id.pool_id;
			 console.log("pool_id", pool_id);
			if(pool_id)
				this.nav.setRoot('VehicleDetailPage',{'pool_id': pool_id,'from_push' : false});
		 }else{
			 var book_id = msg.notification.payload.additionalData.pool_id.id;
			 var stat = msg.notification.payload.additionalData.pool_id.stat;
			if(book_id)
				this.nav.setRoot('BookingDetail',{'id' :book_id,'stat' :stat ,'from_push' : false});
				 
		 }
		 //console.log(this.event_id);
		 //this.detail(this.event_id);
      });


      // End plugin initialisation
     this.oneSignal.endInit();

   }
   
    get_booking(){
  
  	//this.myservice.show_loader();
		this.myservice.load_get('getBookingsopen/id/'+this.user_data.id).subscribe(data => {
			//this.myservice.hide_loader();
			if(data.status == 'success'){
				this.open_count = data.data.open_book;
				console.log("comp book",data);
				 
			}
		});
  }

      get_noti_count(){
  
  //	this.myservice.show_loader();
		this.myservice.load_get('getnoticount/id/'+this.user_data.id).subscribe(data => {
			//this.myservice.hide_loader();
			if(data.status == 'success'){
				this.noti_count = data.data;
				console.log("noti_count",data);
				 
			}
			else{
				this.noti_count = 0;
			}
		});
  }
  legal_notice(){
	this.nav.setRoot('LegalnoticePage');
}
/*push notification ends*/

}

