package com.github.libretube.dialogs

import android.app.Dialog
import android.os.Bundle
import android.widget.Toast
import androidx.fragment.app.DialogFragment
import com.github.libretube.R
import com.github.libretube.databinding.DialogCustomInstanceBinding
import com.github.libretube.obj.CustomInstance
import com.github.libretube.preferences.PreferenceHelper
import com.github.libretube.util.ThemeHelper
import com.google.android.material.dialog.MaterialAlertDialogBuilder
import java.net.URL

class CustomInstanceDialog : DialogFragment() {
    val TAG = "CustomInstanceDialog"
    private lateinit var binding: DialogCustomInstanceBinding

    override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
        return activity?.let {
            val builder = MaterialAlertDialogBuilder(it)
            binding = DialogCustomInstanceBinding.inflate(layoutInflater)

            binding.cancel.setOnClickListener {
                dismiss()
            }

            binding.addInstance.setOnClickListener {
                val customInstance = CustomInstance()
                customInstance.name = binding.instanceName.text.toString()
                customInstance.apiUrl = binding.instanceApiUrl.text.toString()
                customInstance.frontendUrl = binding.instanceFrontendUrl.text.toString()

                if (
                    customInstance.name != "" &&
                    customInstance.apiUrl != "" &&
                    customInstance.frontendUrl != ""
                ) {
                    try {
                        // check whether the URL is valid, otherwise catch
                        URL(customInstance.apiUrl).toURI()
                        URL(customInstance.frontendUrl).toURI()

                        PreferenceHelper.saveCustomInstance(customInstance)
                        activity?.recreate()
                        dismiss()
                    } catch (e: Exception) {
                        // invalid URL
                        Toast.makeText(
                            context,
                            getString(R.string.invalid_url),
                            Toast.LENGTH_SHORT
                        ).show()
                    }
                } else {
                    // at least one empty input
                    Toast.makeText(
                        context,
                        context?.getString(R.string.empty_instance),
                        Toast.LENGTH_SHORT
                    ).show()
                }
            }

            binding.title.text = ThemeHelper.getStyledAppName(requireContext())

            builder.setView(binding.root)
            builder.create()
        } ?: throw IllegalStateException("Activity cannot be null")
    }
}
