package com.iscs.bozzys.ui.pages

import android.app.NotificationChannel
import android.app.NotificationManager
import android.graphics.Color
import android.os.Build
import androidx.compose.foundation.Image
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.layout.ContentScale
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.unit.dp
import com.alibaba.sdk.android.push.CloudPushService
import com.alibaba.sdk.android.push.CommonCallback
import com.alibaba.sdk.android.push.noonesdk.PushServiceFactory
import com.iscs.bozzys.R
import com.iscs.bozzys.service.AliPushService
import com.iscs.bozzys.ui.base.PageBase
import com.iscs.bozzys.ui.pages.home.openPageHome
import com.iscs.bozzys.ui.pages.login.openPageLogin
import com.iscs.bozzys.ui.theme.Main
import com.iscs.bozzys.utils.Storage
import kotlinx.coroutines.delay

/**
 * 配置App启动页面
 */
class PageSplash : PageBase() {

    @Composable
    override fun GetViews(pv: PaddingValues) {
        // 配置页面显示控件
        Box(Modifier.fillMaxSize(), contentAlignment = Alignment.Center) {
            Box(
                Modifier
                    .clip(RoundedCornerShape(20))
            ) {
                Image(
                    painter = painterResource(R.mipmap.logo),
                    contentDescription = "",
                    modifier = Modifier
                        .size(200.dp)
                        .padding(0.dp),
                    contentScale = ContentScale.FillBounds
                )
            }
        }
        // 协程处理跳转事件
        LaunchedEffect(Unit) {
            // 做SDK的初始化操作，有一些没必要在Application中初始化操作的，在这里进行初始化操作
            initSDK()
            delay(3000)
            if (Storage.isLogin()) openPageHome() else openPageLogin()
            destroyDelay(1000)
        }
    }

    /**
     * 这里做一些SDK初始化的操作
     */
    private fun initSDK() {
        // 初始化消息推送
        initPush()
    }

    /**
     * 消息推送初始化操作
     */
    private fun initPush() {
        val pushService = PushServiceFactory.getCloudPushService()
        // 设置输出调试日志
        pushService.setLogLevel(CloudPushService.LOG_DEBUG)
        // 设置消息服务
        pushService.setPushIntentService(AliPushService::class.java)
        // 初始化消息推送
        pushService.register(this, object : CommonCallback {

            override fun onSuccess(msg: String?) {
                // 消息推送初始化成功
                // 这里可能要告知服务端当前推送的设备id，便于后续设备推送通知
            }

            override fun onFailed(errCode: String?, errMsg: String?) {
                // 消息推送初始化失败
            }

        })

        // 建立通知通道
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            val nm = getSystemService(NOTIFICATION_SERVICE) as NotificationManager
            // 通知渠道的id。这个id值需要给后端开发和运维人员，推送的时候对应 AndroidNotificationChannel 参数。
            val channelId = "normal"
            // 用户可以看到的通知渠道的描述。
            val description = getString(R.string.push_channel_normal)
            val importance = NotificationManager.IMPORTANCE_HIGH
            val channel = NotificationChannel(channelId, description, importance)
            // 配置通知渠道的属性。
            channel.description = description
            // 设置通知出现时的闪灯（如果Android设备支持的话）。
            channel.enableLights(true)
            channel.lightColor = Color.RED
            // 设置通知出现时的震动（如果Android设备支持的话）。
            channel.enableVibration(true)
            // 自定义铃声
            // channel.setSound(Uri.parse("android.resource://${packageName}/${R.raw.push_hongbao}"), Notification.AUDIO_ATTRIBUTES_DEFAULT)
            channel.vibrationPattern = longArrayOf(100, 200, 300, 400, 500, 400, 300, 200, 400)
            // 最后在NotificationManager中创建该通知渠道。
            nm.createNotificationChannel(channel)
        }
    }

}