package com.sambath.kunkhmer.screen.shop

import android.app.Activity
import android.content.Intent
import android.net.Uri
import android.os.Bundle
import android.provider.MediaStore
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.Toast
import androidx.activity.result.ActivityResultLauncher
import androidx.activity.result.contract.ActivityResultContracts
import com.sambath.kunkhmer.R
import com.sambath.kunkhmer.app.App
import com.sambath.kunkhmer.remote.CreateProductRequest
import kotlinx.android.synthetic.main.fragment_shop_admin.view.et_desc
import kotlinx.android.synthetic.main.fragment_shop_admin.view.submitButton
import kotlinx.android.synthetic.main.fragment_shop_admin.view.uploadButton
import kotlinx.android.synthetic.main.fragment_shop_admin.view.et_name
import kotlinx.android.synthetic.main.fragment_shop_admin.view.et_price
import kotlinx.android.synthetic.main.fragment_shop_admin.view.uploadedImageView

class ShopAdminFragment : Fragment() {
    private var _root: View? = null
    private val binding get() = _root!!
    private lateinit var shopViewModel: ShopViewModel
    private var imageUri: Uri? = null

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

    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
        _root = inflater.inflate(R.layout.fragment_shop_admin, container, false)

        setDefault()

        shopViewModel = ShopViewModel(App.injectApiService(), App.injectPrefHelper())
        shopViewModel.state.observe(viewLifecycleOwner, androidx.lifecycle.Observer {
            render(it)
        })
        binding.uploadButton.setOnClickListener {
            openImagePicker()
        }

        binding.submitButton.setOnClickListener {
            val imagePath = imageUri?.let { it1 -> getImagePathFromUri(it1) }
            if (imagePath != null) {
                val createProductRequest = CreateProductRequest(
                    binding.et_name.text.toString(),
                    binding.et_desc.text.toString(),
                    binding.et_price.text.toString(),
                    imagePath
                )

                shopViewModel.createProduct(createProductRequest.name, createProductRequest.desc, createProductRequest.price, createProductRequest.upload)
            } else {
                val createProductRequest = CreateProductRequest(
                    binding.et_name.text.toString(),
                    binding.et_desc.text.toString(),
                    binding.et_price.text.toString(),
                    ""
                )

                shopViewModel.createProduct(createProductRequest.name, createProductRequest.desc, createProductRequest.price, createProductRequest.upload)
            }
        }

        // Inflate the layout for this fragment
        return binding
    }

    private fun setDefault(){
        binding.et_name.setText("Bubu")
        binding.et_price.setText("10")
        binding.et_desc.setText("Bubu and Dudu")
    }

    private fun render(state: ShopViewModel.ProductViewState) {
        if (state.isLoginSuccess) {
            Toast.makeText(context, "Create Success...", Toast.LENGTH_LONG).show()

            binding.et_name.setText("")
            binding.et_price.setText("")
            binding.et_desc.setText("")
            binding.uploadedImageView.setImageDrawable(null)
        }
        // Other state handling...
    }

    private val imagePicker: ActivityResultLauncher<Intent> =
        registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
            if (result.resultCode == Activity.RESULT_OK) {
                val data: Intent? = result.data
                if (data != null) {
                    imageUri = data.data // The URI of the selected image
                    if (imageUri != null) {
                        // Load and display the selected image in the ImageView
                        binding.uploadedImageView.setImageURI(imageUri)
                    }
                }
            }
        }

    private fun openImagePicker() {
        val intent = Intent(Intent.ACTION_GET_CONTENT)
        intent.type = "image/*"
        imagePicker.launch(intent)
    }

    private fun getImagePathFromUri(uri: Uri): String? {
        val contentResolver = requireContext().contentResolver
        val cursor = contentResolver.query(uri, null, null, null, null)
        cursor?.use {
            it.moveToFirst()
            val index = it.getColumnIndex(MediaStore.Images.ImageColumns.DATA)
            return it.getString(index)
        }
        return null
    }
}