package com.base.appzxhy.business.service

import android.app.Notification
import android.app.NotificationChannel
import android.app.NotificationManager
import android.app.PendingIntent
import android.content.Context
import android.content.Intent
import android.graphics.BitmapFactory
import android.graphics.drawable.Icon
import android.os.Build
import android.widget.RemoteViews
import androidx.core.app.NotificationCompat
import androidx.core.graphics.drawable.IconCompat
import com.base.appzxhy.R
import com.base.appzxhy.bean.FeatureBean.Companion.JUNK_CLEAN
import com.base.appzxhy.bean.FeatureBean.Companion.RECOVERY_DOCUMENTS
import com.base.appzxhy.bean.FeatureBean.Companion.RECOVERY_PHOTOS
import com.base.appzxhy.bean.FeatureBean.Companion.RECOVERY_VIDEOS
import com.base.appzxhy.ui.main.MainActivity
import com.base.appzxhy.ui.splash.SplashActivity
import kotlin.random.Random

object StayNotification {


    private fun customRemoteViews(context: Context, contentView: RemoteViews, expendView: RemoteViews) {

        arrayOf(R.id.llClean, R.id.llVideo, R.id.llPhoto, R.id.llDocument).forEach {
            val requestCode = Random.nextInt(1800)
            val intent = Intent(context, SplashActivity::class.java).apply {
                if (it == R.id.llClean) {
                    putExtra("actionId", JUNK_CLEAN)
                }
                if (it == R.id.llVideo) {
                    putExtra("actionId", RECOVERY_VIDEOS)
                }
                if (it == R.id.llPhoto) {
                    putExtra("actionId", RECOVERY_PHOTOS)
                }
                if (it == R.id.llDocument) {
                    putExtra("actionId", RECOVERY_DOCUMENTS)
                }
            }
            val pendingIntent =
                PendingIntent.getActivity(
                    context,
                    requestCode,
                    intent,
                    PendingIntent.FLAG_IMMUTABLE
                )
            contentView.setOnClickPendingIntent(it, pendingIntent)
            expendView.setOnClickPendingIntent(it, pendingIntent)
        }
    }


    fun createPermanentNotification(context: Context): Notification {

        val channelName = "Permanent Foreground Service Channel"
        val channelId = "permanent_channel"
        val contentView = RemoteViews(context.packageName, R.layout.stay_notification_small)
        val expendView = RemoteViews(context.packageName, R.layout.stay_notification_big)

        customRemoteViews(context, contentView, expendView)

        val builder = NotificationCompat.Builder(context, channelId)
        val smallIcon = IconCompat.createFromIcon(
            context, Icon.createWithResource(
                context, R.mipmap.logo
            )
        )

        smallIcon?.let {
            builder.setSmallIcon(smallIcon) //设置状态栏内的小图标
        }

        val nfIntent = Intent(context, MainActivity::class.java)
        val pendingIntent =
            PendingIntent.getActivity(context, 0, nfIntent, PendingIntent.FLAG_IMMUTABLE)

        builder.setLargeIcon(BitmapFactory.decodeResource(context.resources, R.mipmap.logo))
        builder.setContentTitle(context.resources.getString(R.string.app_name))
        builder.setContentIntent(pendingIntent) //设置PendingIntent
        builder.setVisibility(NotificationCompat.VISIBILITY_PRIVATE) //设置通知公开可见
        builder.setAutoCancel(false)
        builder.setOngoing(true)
        builder.setPriority(NotificationCompat.PRIORITY_MAX) //优先级为：重要通知
        builder.setWhen(System.currentTimeMillis())
        builder.setCustomContentView(contentView)
        builder.setCustomBigContentView(expendView)
        builder.setCustomHeadsUpContentView(expendView)

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            val channel =
                NotificationChannel(channelId, channelName, NotificationManager.IMPORTANCE_LOW)
            channel.lockscreenVisibility = 1
            val notificationManager =
                context.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
            notificationManager.createNotificationChannel(channel)
            builder.setChannelId(channelId)
        }
        return builder.build()
    }


}