package com.fastest.pass.login.presentation.ui

import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.padding
import androidx.compose.material.Scaffold
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.ComposeView
import androidx.compose.ui.res.colorResource
import androidx.fragment.app.Fragment
import androidx.fragment.app.viewModels
import com.fastest.pass.BaseFragment
import com.fastest.pass.R
import com.fastest.pass.login.presentation.ui.components.ClickType
import com.fastest.pass.login.presentation.ui.components.LoginScreen
import com.fastest.pass.login.presentation.viewmodels.LoginViewModel
import com.fastest.pass.login.utils.LoginNavigation
import com.fastest.pass.login.utils.LoginRoute
import com.fastest.pass.ui.theme.FastestPassTheme
import dagger.hilt.android.AndroidEntryPoint
import javax.inject.Inject

@AndroidEntryPoint
class LoginFragment : BaseFragment() {

    val viewmodel: LoginViewModel by viewModels()

    @Inject
    lateinit var navigation: LoginNavigation

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        navigation.navigate(this)
    }

    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View {
        return ComposeView(requireActivity()).apply {
            setContent {
                FastestPassTheme {
                    Scaffold(
                        modifier = Modifier.fillMaxSize()
                    ) { paddingValues ->
                        Box(
                            modifier = Modifier
                                .fillMaxSize()
                                .background(colorResource(id = R.color.white))
                                .padding(paddingValues.calculateBottomPadding())
                        ) {
                            LoginScreen { clickType ->
                                when (clickType) {
                                    ClickType.SIGNUP_CLICK -> {
                                        viewmodel.navigateTo(LoginRoute.OpenSignUp)
                                    }
                                    ClickType.FORGOT_PASSWORD_CLICK -> {
                                        viewmodel.navigateTo(LoginRoute.OpenForgotPassword)
                                    }
                                    ClickType.GO_BACK -> {
                                        viewmodel.navigateTo(LoginRoute.GoBack)
                                    }
                                    ClickType.MASTER_LOGIN -> {
                                        viewmodel.navigateTo(LoginRoute.OpenMasterLoginScreen)
                                    }
                                    ClickType.HOME_SCREEN -> {
                                        viewmodel.navigateTo(LoginRoute.OpenDashBoardScreen)
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}