package btools.routingapp;

import android.app.Notification;
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.media.AudioAttributes;
import android.os.Build;
import android.util.Log;

import androidx.core.app.NotificationCompat;


import static android.content.Context.NOTIFICATION_SERVICE;

public class NotificationHelper {

    private static final boolean DEBUG = false;

    public static String BRouterNotificationChannel1 = "brouter_channel_01";

    private Context mContext;
    private int NOTIFICATION_ID = 111;
    private Notification mNotification;
    private NotificationManager mNotificationManager;
    private PendingIntent mContentIntent;
    private CharSequence mContentTitle;

    public NotificationHelper(Context context)
    {
        if (DEBUG) Log.d("NH", "init " );
        mContext = context;
        createNotificationChannels();
    }

    public void startNotification(Service service) {
        if (DEBUG) Log.d("NH", "startNotification " );

        mNotification = createNotification("BRouter Download", "Download some files");

        if (service != null) service.startForeground(NOTIFICATION_ID, mNotification);

        mNotificationManager.notify(NOTIFICATION_ID, mNotification);

    }

    public void progressUpdate(String text) {
        mNotification = createNotification("BRouter Download", text);
        mNotification.flags = Notification.FLAG_NO_CLEAR |
                Notification.FLAG_ONGOING_EVENT;

        mNotificationManager.notify(NOTIFICATION_ID, mNotification);
    }


    public Notification createNotification(String title, String desc) {

        Intent resultIntent = new Intent(mContext, BInstallerActivity.class);

        Intent notificationIntent = new Intent();
        mContentIntent = PendingIntent.getActivity(mContext, 0, resultIntent, PendingIntent.FLAG_IMMUTABLE);

        mNotificationManager = (NotificationManager) mContext.getSystemService(NOTIFICATION_SERVICE);

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {


            final NotificationCompat.Builder builder = new NotificationCompat.Builder(mContext, BRouterNotificationChannel1);
            builder.setSmallIcon(android.R.drawable.stat_sys_download)
                    .setVisibility(NotificationCompat.VISIBILITY_PUBLIC)
                    .setContentTitle(title)
                    .setContentText(desc)
                    .setTicker(desc)
                    .setOngoing(true)
                    .setAutoCancel(true)
                    .setOnlyAlertOnce(true)
                    .setCategory(NotificationCompat.CATEGORY_SERVICE)
                    .setContentIntent(mContentIntent);

            return builder.build();

        } else {
            final NotificationCompat.Builder builder = new NotificationCompat.Builder(mContext);
            builder.setSmallIcon(android.R.drawable.stat_sys_download)
                    .setVisibility(NotificationCompat.VISIBILITY_PUBLIC)
                    .setContentTitle(title)
                    .setContentText(desc)
                    .setOnlyAlertOnce(true)
                    .setCategory(NotificationCompat.CATEGORY_SERVICE)
                    .setContentIntent(mContentIntent);

            return builder.build();
        }

 }

    /**
     * create notification channels
     */
    public  void createNotificationChannels() {
        if (DEBUG) Log.d("NH", "createNotificationChannels " );

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {

            NotificationManager sNotificationManager = (NotificationManager) mContext.getSystemService(Context.NOTIFICATION_SERVICE);
            // Sound channel
            CharSequence name = "BRouter Download";
            // The user-visible description of the channel.
            String description = "BRouter Download Channel"; //getString(R.string.channel_description);

            NotificationChannel channel = new NotificationChannel(BRouterNotificationChannel1, name, NotificationManager.IMPORTANCE_LOW);
            channel.setDescription(description);
            AudioAttributes att = new AudioAttributes.Builder()
                    .setUsage(AudioAttributes.USAGE_UNKNOWN)
                    .setContentType(AudioAttributes.CONTENT_TYPE_UNKNOWN)
                    .build();
            channel.setSound(null, null);
            channel.setLockscreenVisibility(Notification.VISIBILITY_PUBLIC);

            sNotificationManager.createNotificationChannel(channel);

        }
    }

    public void stopNotification()    {
        if (DEBUG) Log.d("NH", "stopNotification " );
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            mNotificationManager.deleteNotificationChannel(BRouterNotificationChannel1);
        }
        mNotificationManager.cancel(NOTIFICATION_ID);
    }
}