package com.siro.siro_driver

import android.app.Presentation
import android.content.Context
import android.os.Bundle
import android.view.Display
import android.view.ViewGroup
import android.widget.FrameLayout
import org.maplibre.android.MapLibre
import org.maplibre.android.camera.CameraPosition
import org.maplibre.android.camera.CameraUpdateFactory
import org.maplibre.android.geometry.LatLng
import org.maplibre.android.maps.MapView
import org.maplibre.android.maps.MapLibreMap
import org.maplibre.android.maps.Style

/**
 * شاشة عرض وهمية (Presentation) تُرسم على VirtualDisplay الخاص بشاشة السيارة.
 * تستخدم MapLibre Native SDK لعرض الخريطة بنفس ستايل تطبيق سيرو.
 */
class MapPresentation(outerContext: Context, display: Display) : Presentation(outerContext, display) {
    lateinit var mapView: MapView
    private var mapboxMap: MapLibreMap? = null
    private var isMapReady = false

    private val locationListener: () -> Unit = {
        updateCameraPosition()
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        MapLibre.getInstance(context)

        val root = FrameLayout(context)
        root.layoutParams = ViewGroup.LayoutParams(
            ViewGroup.LayoutParams.MATCH_PARENT,
            ViewGroup.LayoutParams.MATCH_PARENT
        )

        mapView = MapView(context)
        mapView.layoutParams = FrameLayout.LayoutParams(
            FrameLayout.LayoutParams.MATCH_PARENT,
            FrameLayout.LayoutParams.MATCH_PARENT
        )

        root.addView(mapView)
        setContentView(root)

        mapView.onCreate(savedInstanceState)
        mapView.getMapAsync { map ->
            mapboxMap = map

            // تحميل ستايل خرائط سيرو من أصول فلاتر
            val styleUrl = "asset://flutter_assets/assets/style.json"
            map.setStyle(Style.Builder().fromUri(styleUrl)) {
                isMapReady = true
                updateCameraPosition()
            }

            // إعدادات مناسبة لشاشة السيارة
            map.uiSettings.isCompassEnabled = false
            map.uiSettings.isLogoEnabled = false
            map.uiSettings.isAttributionEnabled = false
        }

        // الاستماع لتحديثات الموقع القادمة من فلاتر
        CarNavigationData.addListener(locationListener)
    }

    private fun updateCameraPosition() {
        if (!isMapReady || mapboxMap == null) return

        val lat = CarNavigationData.currentLat
        val lng = CarNavigationData.currentLng
        val bearing = CarNavigationData.currentBearing
        val speed = CarNavigationData.currentSpeed

        if (lat == 0.0 && lng == 0.0) return

        // حساب الزوم المناسب بناءً على السرعة (نفس المنطق في فلاتر)
        val zoom = when {
            speed < 15  -> 17.0
            speed < 40  -> 16.5
            speed < 70  -> 15.5
            speed < 100 -> 15.0
            else        -> 14.0
        }

        // حساب الميل (Tilt) بناءً على السرعة لتأثير ثلاثي الأبعاد
        val tilt = when {
            speed < 10  -> 0.0
            speed < 40  -> 40.0
            else        -> 55.0
        }

        val position = CameraPosition.Builder()
            .target(LatLng(lat, lng))
            .zoom(zoom)
            .bearing(bearing)
            .tilt(tilt)
            .build()

        mapboxMap?.animateCamera(
            CameraUpdateFactory.newCameraPosition(position),
            1000  // انتقال سلس خلال ثانية
        )
    }

    override fun onStart() { super.onStart(); mapView.onStart() }
    override fun onStop() { super.onStop(); mapView.onStop() }

    fun onResume() { mapView.onResume() }
    fun onPause() { mapView.onPause() }
    fun onDestroy() {
        CarNavigationData.removeListener(locationListener)
        mapView.onDestroy()
    }
}
