package com.example.cuida.ui.sns24;

import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Toast;

import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;

import com.example.cuida.databinding.FragmentSns24Binding;
import com.example.cuida.services.Ollama;

public class Sns24Fragment extends Fragment {

    private FragmentSns24Binding binding;
    private Ollama ollama;

    public View onCreateView(@NonNull LayoutInflater inflater,
                             ViewGroup container, Bundle savedInstanceState) {

        binding = FragmentSns24Binding.inflate(inflater, container, false);
        View root = binding.getRoot();

        ollama = new Ollama();

        // 1. Botão de Chamada SNS 24
        binding.buttonCallSns.setOnClickListener(v -> {
            Intent intent = new Intent(Intent.ACTION_DIAL);
            intent.setData(Uri.parse("tel:808242424"));
            startActivity(intent);
        });

        // 2. Esconder o botão de hospital inicialmente
        binding.buttonFindHospital.setVisibility(View.GONE);

        // 3. Botão Triagem IA
        binding.buttonAiTriage.setOnClickListener(v -> {
            String symptoms = binding.inputSymptoms.getText().toString().trim();
            if (!symptoms.isEmpty()) {
                hideKeyboard();
                analyzeSymptomsWithGemini(symptoms);
            } else {
                Toast.makeText(getContext(), "Descreva os sintomas.", Toast.LENGTH_SHORT).show();
            }
        });

        return root;
    }

    private void hideKeyboard() {
        View view = getActivity() != null ? getActivity().getCurrentFocus() : null;
        if (view != null) {
            android.view.inputmethod.InputMethodManager imm = (android.view.inputmethod.InputMethodManager)
                    getActivity().getSystemService(android.content.Context.INPUT_METHOD_SERVICE);
            if (imm != null) {
                imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
            }
        }
    }

    private void analyzeSymptomsWithGemini(String symptoms) {
        binding.buttonAiTriage.setEnabled(false);
        binding.textAiResult.setVisibility(View.VISIBLE);
        binding.textAiResult.setText("A analisar sintomas...");
        binding.buttonFindHospital.setVisibility(View.GONE);

        String prompt = "Atua como triagem médica de urgência (estilo SNS 24). " +
                "Sê extremamente direto, objetivo e conciso. Não uses introduções ou saudações. " +
                "Responde apenas com: 1) Causa provável, 2) Ação imediata recomendada. " +
                "Se os sintomas indicarem perigo de vida ou necessidade de observação urgente, OBRIGATORIAMENTE começa a tua primeira linha com a palavra [GRAVE]. " +
                "Sintomas do paciente: " + symptoms;

        ollama.fazerPergunta(prompt, new Ollama.OllamaCallback() {
            @Override
            public void onSuccess(String result) {
                // Já estamos na Main Thread graças ao Handler no serviço!
                if (getActivity() != null && binding != null) {

                    // Limpa o marcador [GRAVE] para não aparecer ao utilizador
                    String displayResult = result.replace("[GRAVE]", "").trim();

                    binding.textAiResult.setText(displayResult);
                    binding.buttonAiTriage.setEnabled(true);

                    // Verifica se a string ORIGINAL continha o marcador
                    if (result.contains("[GRAVE]")) {
                        binding.buttonFindHospital.setVisibility(View.VISIBLE);
                        binding.buttonFindHospital.setOnClickListener(v -> {
                            Uri gmmIntentUri = Uri.parse("geo:0,0?q=hospital+mais+proximo");
                            Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri);
                            mapIntent.setPackage("com.google.android.apps.maps");
                            startActivity(mapIntent);
                        });
                    }

                    saveTriageToHistory(symptoms, displayResult);
                }
            }

            @Override
            public void onError(Throwable t) {
                // Já estamos na Main Thread
                if (getActivity() != null && binding != null) {
                    binding.textAiResult.setText("Erro na ligação: " + t.getMessage());
                    binding.buttonAiTriage.setEnabled(true);
                }
            }
        });
    }

    private void saveTriageToHistory(String symptoms, String result) {
        if (getActivity() == null) return;
        com.google.firebase.auth.FirebaseUser user = com.google.firebase.auth.FirebaseAuth.getInstance().getCurrentUser();
        if (user == null) return;

        java.util.Map<String, Object> triage = new java.util.HashMap<>();
        triage.put("userId", user.getUid());
        triage.put("sintomas", symptoms);
        triage.put("resultado", result);
        triage.put("data", new java.text.SimpleDateFormat("dd/MM/yyyy HH:mm", java.util.Locale.getDefault()).format(new java.util.Date()));
        triage.put("timestamp", com.google.firebase.firestore.FieldValue.serverTimestamp());

        com.google.firebase.firestore.FirebaseFirestore.getInstance()
                .collection("triagens").add(triage);
    }

    @Override
    public void onDestroyView() {
        super.onDestroyView();
        binding = null;
    }
}
