package com.lofiradio.ui import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.Toast import androidx.fragment.app.Fragment import com.lofiradio.R import com.lofiradio.databinding.FragmentSettingsBinding import com.lofiradio.util.Preferences class SettingsFragment : Fragment() { private var _binding: FragmentSettingsBinding? = null private val binding get() = _binding!! override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View { _binding = FragmentSettingsBinding.inflate(inflater, container, false) return binding.root } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) loadSettings() setupStreamingMode() setupServerUrl() setupYouTubeApiKey() setupAutoAdvance() } private fun loadSettings() { val mode = Preferences.getStreamingMode(requireContext()) if (mode == Preferences.StreamingMode.DIRECT) { binding.radioDirect.isChecked = true } else { binding.radioServer.isChecked = true } binding.etServerUrl.setText(Preferences.getServerUrl(requireContext())) binding.etYouTubeApiKey.setText(Preferences.getYouTubeApiKey(requireContext()) ?: "") binding.switchAutoAdvance.isChecked = Preferences.isAutoAdvance(requireContext()) updateCardVisibility() } private fun setupStreamingMode() { binding.radioServer.setOnCheckedChangeListener { _, isChecked -> if (isChecked) { Preferences.setStreamingMode(requireContext(), Preferences.StreamingMode.SERVER) Toast.makeText(requireContext(), "Switched to Server Proxy mode", Toast.LENGTH_SHORT).show() updateCardVisibility() } } binding.radioDirect.setOnCheckedChangeListener { _, isChecked -> if (isChecked) { Preferences.setStreamingMode(requireContext(), Preferences.StreamingMode.DIRECT) Toast.makeText(requireContext(), "Switched to Direct mode", Toast.LENGTH_SHORT).show() updateCardVisibility() } } } private fun setupServerUrl() { binding.etServerUrl.setOnFocusChangeListener { _, hasFocus -> if (!hasFocus) { val url = binding.etServerUrl.text.toString().trim() if (url.isNotEmpty()) { Preferences.setServerUrl(requireContext(), url) } } } } private fun setupYouTubeApiKey() { binding.etYouTubeApiKey.setOnFocusChangeListener { _, hasFocus -> if (!hasFocus) { val key = binding.etYouTubeApiKey.text.toString().trim() Preferences.setYouTubeApiKey(requireContext(), key.ifBlank { null }) if (key.isNotEmpty()) { Toast.makeText(requireContext(), "YouTube API Key saved", Toast.LENGTH_SHORT).show() } } } } private fun setupAutoAdvance() { binding.switchAutoAdvance.setOnCheckedChangeListener { _, isChecked -> Preferences.setAutoAdvance(requireContext(), isChecked) } } private fun updateCardVisibility() { val isServerMode = binding.radioServer.isChecked binding.serverSettingsCard.visibility = if (isServerMode) View.VISIBLE else View.GONE binding.youtubeApiCard.visibility = if (!isServerMode) View.VISIBLE else View.GONE } override fun onDestroyView() { super.onDestroyView() _binding = null } }