package com.siro.siro_driver

import androidx.car.app.CarContext
import androidx.car.app.Screen
import androidx.car.app.model.Action
import androidx.car.app.model.CarColor
import androidx.car.app.model.CarIcon
import androidx.car.app.model.Distance
import androidx.car.app.model.MessageTemplate
import androidx.car.app.model.Template
import androidx.car.app.navigation.model.Maneuver
import androidx.car.app.navigation.model.NavigationTemplate
import androidx.car.app.navigation.model.RoutingInfo
import androidx.car.app.navigation.model.Step

class MyCarScreen(carContext: CarContext) : Screen(carContext) {

    init {
        CarNavigationData.addListener {
            invalidate()
        }
    }

    override fun onGetTemplate(): Template {
        // إذا لم يكن التوجيه نشطاً بعد، نعرض شاشة ترحيبية
        if (!CarNavigationData.isNavigating) {
            return MessageTemplate.Builder("مرحباً بك في سيرو درايفر\nبانتظار بدء رحلة جديدة...")
                .setTitle("Siro Driver")
                .setHeaderAction(Action.APP_ICON)
                .build()
        }

        // --- بناء معلومات التوجيه (Turn-by-Turn) ---
        val maneuverType = mapSiroManeuverToCarManeuver(CarNavigationData.maneuverType)
        val maneuver = Maneuver.Builder(maneuverType).build()

        val step = Step.Builder(CarNavigationData.currentInstruction)
            .setManeuver(maneuver)
            .build()

        val distanceToStep = Distance.create(
            CarNavigationData.distanceToNextStepMeters,
            Distance.UNIT_METERS
        )

        val routingInfo = RoutingInfo.Builder()
            .setCurrentStep(step, distanceToStep)
            .build()

        // --- بناء قالب التوجيه ---
        return NavigationTemplate.Builder()
            .setNavigationInfo(routingInfo)
            .setActionStrip(
                androidx.car.app.model.ActionStrip.Builder()
                    .addAction(Action.APP_ICON)
                    .build()
            )
            .setBackgroundColor(CarColor.PRIMARY)
            .build()
    }

    /**
     * تحويل أكواد الانعطاف الخاصة بتطبيق سيرو (NavigationController.currentManeuverModifier)
     * إلى أكواد Maneuver الرسمية من مكتبة Android for Cars.
     */
    private fun mapSiroManeuverToCarManeuver(siroCode: Int): Int {
        return when (siroCode) {
            0  -> Maneuver.TYPE_STRAIGHT           // مستقيم
            2  -> Maneuver.TYPE_TURN_NORMAL_RIGHT  // يمين
            3  -> Maneuver.TYPE_TURN_SLIGHT_RIGHT  // يمين خفيف
            -2 -> Maneuver.TYPE_TURN_NORMAL_LEFT   // يسار
            -1 -> Maneuver.TYPE_TURN_SLIGHT_LEFT   // يسار خفيف
            4  -> Maneuver.TYPE_DESTINATION         // وصلت
            6  -> Maneuver.TYPE_ROUNDABOUT_ENTER_AND_EXIT_CW // دوار
            7  -> Maneuver.TYPE_KEEP_RIGHT          // ابق يمين
            -7 -> Maneuver.TYPE_KEEP_LEFT           // ابق يسار
            else -> Maneuver.TYPE_UNKNOWN
        }
    }
}
