import { HttpClient } from '@angular/common/http';
import { Injectable } from '@angular/core';
import { Observable } from 'rxjs';
//import 'rxjs/add/operator/map';
import { environment } from 'src/environments/environment';
import { SessionDataProviderService } from '../store/session-data-provider.service';
import {Router} from "@angular/router";
import OneSignal from 'onesignal-cordova-plugin';

@Injectable({
  providedIn: 'root'
})
export class OnesignalService {
    AppId;

    constructor(private http: HttpClient,
        private router: Router,
        public sessionDataProviderService :SessionDataProviderService) {
        // this is test
        this.AppId = '13755f98-ec69-45fd-a2f1-d2166afcaa51';
    }

    // Call this function when your app starts
    Init(member_uid): void {

        // https://documentation.onesignal.com/docs/mobile-sdk
        alert('OneSignalInit');

        // 0 = None, 1 = Fatal, 2 = Errors, 3 = Warnings, 4 = Info, 5 = Debug, 6 = Verbose
        // Uncomment to set OneSignal device logging to VERBOSE  
        OneSignal.Debug.setLogLevel(6);
        
        // 0 = None, 1 = Fatal, 2 = Errors, 3 = Warnings, 4 = Info, 5 = Debug, 6 = Verbose
        // Uncomment to set OneSignal visual logging to VERBOSE  
        //OneSignal.Debug.setAlertLevel(6);
        OneSignal.Debug.setAlertLevel(4);

        // NOTE: Update the init value below with your OneSignal AppId.
        OneSignal.init(this.AppId);

        // Location permissions enable geotagging in the OneSignal dashboard to send notifications to users based on their location
        OneSignal.Location.setShared(true);
        
        let myClickListener = async function(event) {
        let notificationData = JSON.stringify(event);
        alert("CLICKED: " + notificationData);
        console.log('notificationOpenedCallback: ' + JSON.stringify(notificationData));
            
        };
        OneSignal.Notifications.addEventListener("click", myClickListener);

        // Set a handler to run before displaying a notification while the app is in focus.
        let myForegroundWillDisplayListener = async function(event) {
            let notificationData = JSON.stringify(event);
            alert("RECEIVED: " + notificationData);
            console.log('foregroundWillDisplayCallback : ' + JSON.stringify(notificationData));
                
            /// Display Notification, preventDefault to not display
            event.preventDefault();

            // Use notification.display() to display the notification after some async work
            //event.notification.display();
        };
        OneSignal.Notifications.addEventListener('foregroundWillDisplay', myForegroundWillDisplayListener);

        // Prompts the user for notification permissions.
        //    * Since this shows a generic native prompt, we recommend instead using an In-App Message to prompt for notification permission (See step 7) to better communicate to your users what notifications they will get.
        OneSignal.Notifications.requestPermission(function(accepted) {
            console.log("User accepted notifications: " + accepted);
        });

        //OneSignal.User.addAlias("external_id", member_uid);
        OneSignal.login(member_uid);
        // OneSignal.getUser().addEmail(emailAddress, emailAuthHash);
        // Auth hashes are expected to be a HMAC on a SHA-256 of the OneSignal REST API Key and the <protected_field_value>
        // <?php echo hash_hmac('sha256', $email_address, $ONESIGNAL_REST_API_KEY);
        // OneSignal.getUser().addSms(smsNumber, smsAuthHash);

        OneSignal.Location.requestPermission();
        /*
        AndroidManifest.xml

        // Make sure you add one of the following permissions
        <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
        <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
        <uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />

        app/build.gradle

        dependencies {
        ...
        implementation 'com.google.android.gms:play-services-location:YOUR_PLAY_SERVICES_VERSION'
        }
        */
    }    
}