package com.prodhack.moscow2025

import android.app.Notification
import android.app.NotificationChannel
import android.app.NotificationManager
import android.app.PendingIntent
import android.content.Intent
import android.util.Log
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.toArgb
import androidx.core.app.NotificationCompat
import com.google.firebase.messaging.FirebaseMessagingService
import com.google.firebase.messaging.RemoteMessage
import com.prodhack.moscow2025.presentation.MainActivity

class FirebaseMessagingService : FirebaseMessagingService() {

	override fun onCreate() {
		super.onCreate()
		createNotificationChannel()
	}

	override fun onMessageReceived(message: RemoteMessage) {

		val title = message.data["title"]
		val text = message.data["body"]
		Log.e(
			"fcm",
			"title=$title" +
					"\ntext=$text"
		)

		title?.let { it1 -> text?.let { it2 -> sendNotification(it1, it2) } }
	}

	override fun onNewToken(token: String) {
		super.onNewToken(token)
		Log.e("fcm", "token=$token")
	}

	private fun createNotificationChannel() {
		val channel = NotificationChannel(
			"default_channel_id",
			"MainAppNotifications",
			NotificationManager.IMPORTANCE_HIGH
		).apply {
			description = "Channel for main motifications"
			enableLights(true)
			lightColor = Color.Red.toArgb()
			enableVibration(true)
			vibrationPattern = longArrayOf(0, 500, 200, 500)
			lockscreenVisibility = Notification.VISIBILITY_PUBLIC
		}

		val notificationManager =
			getSystemService(NOTIFICATION_SERVICE) as NotificationManager
		notificationManager.createNotificationChannel(channel)
	}

	private fun sendNotification(title: String?, messageBody: String?) {
		val intent = Intent(this, MainActivity::class.java).apply {
			addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
		}

		val pendingIntent = PendingIntent.getActivity(
			this, 0, intent,
			PendingIntent.FLAG_ONE_SHOT or PendingIntent.FLAG_IMMUTABLE
		)

		val notificationBuilder = NotificationCompat.Builder(this, "default_channel_id")
			.setSmallIcon(R.drawable.ic_launcher_background) // замените на свою иконку
			.setContentTitle(title ?: "Уведомление")
			.setContentText(messageBody)
			.setAutoCancel(true)
			.setContentIntent(pendingIntent)

		val notificationManager =
			getSystemService(NOTIFICATION_SERVICE) as NotificationManager
		notificationManager.notify(0, notificationBuilder.build())
	}
}