package com.example.basurapp import android.os.Bundle import android.view.View import android.widget.ArrayAdapter import android.widget.Toast import androidx.appcompat.app.AppCompatActivity import androidx.lifecycle.lifecycleScope import com.example.basurapp.api.ApiClient import com.example.basurapp.databinding.ActivityAddAddressBinding import com.example.basurapp.models.Address import com.example.basurapp.models.ColoniaRuta import com.google.firebase.auth.FirebaseAuth import com.google.firebase.firestore.FirebaseFirestore import kotlinx.coroutines.launch class AddAddressActivity : AppCompatActivity() { private lateinit var binding: ActivityAddAddressBinding private val auth: FirebaseAuth by lazy { FirebaseAuth.getInstance() } private val db: FirebaseFirestore by lazy { FirebaseFirestore.getInstance() } private var coloniasList: List = emptyList() override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) binding = ActivityAddAddressBinding.inflate(layoutInflater) setContentView(binding.root) loadColonias() binding.btnSave.setOnClickListener { saveAddress() } } private fun loadColonias() { binding.progressBar.visibility = View.VISIBLE lifecycleScope.launch { try { coloniasList = ApiClient.api.getColoniasRutas() val names = coloniasList.map { it.colonia } val adapter = ArrayAdapter(this@AddAddressActivity, android.R.layout.simple_dropdown_item_1line, names) binding.actvColonia.setAdapter(adapter) binding.progressBar.visibility = View.GONE } catch (e: Exception) { binding.progressBar.visibility = View.GONE Toast.makeText(this@AddAddressActivity, "Error cargando colonias: ${e.localizedMessage}", Toast.LENGTH_LONG).show() } } } private fun saveAddress() { val street = binding.etStreet.text?.toString()?.trim().orEmpty() val number = binding.etNumber.text?.toString()?.trim().orEmpty() val coloniaSelected = binding.actvColonia.text?.toString()?.trim().orEmpty() val reference = binding.etReference.text?.toString()?.trim().orEmpty() if (street.isEmpty() || number.isEmpty() || coloniaSelected.isEmpty()) { Toast.makeText(this, "Completa calle, número y colonia", Toast.LENGTH_SHORT).show() return } // Validar que la colonia exista en el catálogo val validColonia = coloniasList.any { it.colonia.equals(coloniaSelected, ignoreCase = true) } if (!validColonia) { Toast.makeText(this, "Selecciona una colonia válida de la lista", Toast.LENGTH_SHORT).show() return } val uid = auth.currentUser?.uid ?: return val addressId = db.collection("addresses").document().id val address = Address( id = addressId, userId = uid, street = street, number = number, neighborhood = coloniaSelected, city = "Celaya", reference = reference ) binding.btnSave.isEnabled = false db.collection("addresses").document(addressId).set(address) .addOnSuccessListener { Toast.makeText(this, "Dirección guardada", Toast.LENGTH_SHORT).show() finish() } .addOnFailureListener { e -> binding.btnSave.isEnabled = true Toast.makeText(this, e.localizedMessage ?: "Error", Toast.LENGTH_SHORT).show() } } }