package com.example.pap_findu;

import android.os.Bundle;
import android.text.TextUtils;
import android.util.Log;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.Toast;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import com.example.pap_findu.adapters.ChatAdapter;
import com.example.pap_findu.models.ChatMessage;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.ValueEventListener;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Locale;

public class ChatActivity extends AppCompatActivity {

    private RecyclerView recyclerChat;
    private EditText editChatMessage;
    private ImageButton btnSend;
    private ImageButton btnBack;
    private ChatAdapter adapter;
    private List<ChatMessage> messageList;

    private DatabaseReference chatRef;
    private String currentUserId;
    private String accessCode;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.chat_activity);

        // 1. Inicializar Firebase e User
        currentUserId = FirebaseAuth.getInstance().getUid();

        // Recuperamos o código da "sala" (partilhado entre pai e filho)
        accessCode = getSharedPreferences("FindU_Prefs", MODE_PRIVATE)
                .getString("child_access_code", null);

        if (accessCode == null) {
            Toast.makeText(this, "Erro: Sala de chat não encontrada", Toast.LENGTH_SHORT).show();
            finish();
            return;
        }

        // Caminho no Firebase: chats / 123456 / messages
        chatRef = FirebaseDatabase.getInstance().getReference("chats")
                .child(accessCode)
                .child("messages");

        // 2. Ligar Componentes do Teu Layout
        recyclerChat = findViewById(R.id.recycler_chat);
        editChatMessage = findViewById(R.id.edit_chat_message);
        btnSend = findViewById(R.id.btnSend);
        btnBack = findViewById(R.id.btnBack);

        // 3. Configurar RecyclerView e Adapter
        messageList = new ArrayList<>();
        adapter = new ChatAdapter(messageList);
        recyclerChat.setLayoutManager(new LinearLayoutManager(this));
        recyclerChat.setAdapter(adapter);

        // 4. Lógica do Botão Enviar
        btnSend.setOnClickListener(v -> {
            String text = editChatMessage.getText().toString().trim();
            if (!TextUtils.isEmpty(text)) {
                sendMessageToFirebase(text);
            }
        });

        // 5. Lógica do Botão Voltar
        btnBack.setOnClickListener(v -> finish());

        // 6. Começar a ouvir mensagens em tempo real
        listenForMessages();
    }

    private void sendMessageToFirebase(String text) {
        String currentTime = new SimpleDateFormat("HH:mm", Locale.getDefault()).format(new Date());

        // Criamos a mensagem com o ID de quem envia
        ChatMessage newMessage = new ChatMessage(text, currentUserId, currentTime);

        // "Empurramos" para o Firebase (Gera um ID único automático)
        chatRef.push().setValue(newMessage)
                .addOnSuccessListener(aVoid -> {
                    editChatMessage.setText(""); // Limpa o campo se correu bem
                })
                .addOnFailureListener(e -> {
                    Toast.makeText(this, "Erro ao enviar", Toast.LENGTH_SHORT).show();
                });
    }

    private void listenForMessages() {
        chatRef.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot snapshot) {
                messageList.clear();
                for (DataSnapshot data : snapshot.getChildren()) {
                    ChatMessage msg = data.getValue(ChatMessage.class);
                    if (msg != null) {
                        // Se o senderId for o MEU, o adapter desenha à direita (azul)
                        msg.setSentByMe(msg.getSenderId().equals(currentUserId));
                        messageList.add(msg);
                    }
                }
                adapter.notifyDataSetChanged();

                // Faz scroll automático para a última mensagem
                if (messageList.size() > 0) {
                    recyclerChat.scrollToPosition(messageList.size() - 1);
                }
            }

            @Override
            public void onCancelled(@NonNull DatabaseError error) {
                Log.e("ChatActivity", "Erro no Firebase: " + error.getMessage());
            }
        });
    }
}