package com.sambath.kunkhmer.screen.news

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 androidx.navigation.findNavController
import com.sambath.kunkhmer.R
import com.sambath.kunkhmer.app.App
import com.sambath.kunkhmer.remote.CreateNewsRequest
import kotlinx.android.synthetic.main.fragment_news_admin.view.et_desc
import kotlinx.android.synthetic.main.fragment_news_admin.view.et_title
import kotlinx.android.synthetic.main.fragment_news_admin.view.submitButton
import kotlinx.android.synthetic.main.fragment_news_admin.view.uploadButton
import kotlinx.android.synthetic.main.fragment_news_admin.view.uploadedImageView
import androidx.navigation.findNavController
import kotlinx.android.synthetic.main.fragment_news_admin.view.create_highlight
import kotlinx.android.synthetic.main.fragment_news_admin.view.til_title

class NewsAdminFragment : Fragment() {
    private var _root: View? = null
    private val binding get() = _root!!
    private lateinit var newsViewModel: NewsViewModel
    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_news_admin, container, false)

        newsViewModel = NewsViewModel(App.injectApiService(), App.injectPrefHelper())
        newsViewModel.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) {
                // You can store the image URI as a string in your CreateNewsRequest object
                val createNewsRequest = CreateNewsRequest(
                    binding.et_title.text.toString(),
                    binding.et_desc.text.toString(),
                    imagePath
                )
                newsViewModel.createNews(createNewsRequest.title, createNewsRequest.desc, createNewsRequest.upload)
            } else {
                // Handle the case where the image path is null
                val createNewsRequest = CreateNewsRequest(
                    binding.et_title.text.toString(),
                    binding.et_desc.text.toString(),
                    ""
                )
                newsViewModel.createNews(createNewsRequest.title, createNewsRequest.desc, createNewsRequest.upload)
            }
        }

        binding.et_title.setText("Theara predicts elbow-driven victory, claims world Kun Khmer title")
        binding.et_desc.setText("Top fighter")

        binding.create_highlight.setOnClickListener {
            requireActivity().findNavController(R.id.nav_host_fragment_activity_main).navigate(R.id.navigation_create_highlight)
        }

        return binding;
    }

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

            binding.et_title.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
    }

}