package com.example.punyaria;

import android.content.Intent;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment;

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.Calendar;
import java.util.List;
import java.util.Locale;

public class WellnessFragment extends Fragment {

    private DatabaseReference wellnessRef;
    private ListView listView;
    private CustomAdapterWellness adapter;
    private List<String> wellnessHistory;
    private String perasaanSelected = ""; // menyimpan perasaan yang dipilih
    private String keluhan = ""; // menyimpan keluhan yang dimasukkan

    public WellnessFragment() {
        // Required empty public constructor
    }

    public static WellnessFragment newInstance() {
        return new WellnessFragment();
    }

    // Metode untuk navigasi ke RiwayatWellnessActivity
    private void goToRiwayatWellness() {
        Intent intent = new Intent(getActivity(), RiwayatWellnessActivity.class);
        startActivity(intent);
    }

    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // Inisialisasi referensi database wellness
        wellnessRef = FirebaseDatabase.getInstance().getReference().child("wellness");
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_wellness, container, false);

        TextView textView = view.findViewById(R.id.text_capt3);
        textView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                goToRiwayatWellness();
            }
        });

        // Inisialisasi ListView
        listView = view.findViewById(R.id.listViewWellness);

        // Inisialisasi daftar riwayat wellness
        wellnessHistory = new ArrayList<>();

        // Inisialisasi adapter kustom untuk ListView dengan layout kustom
        adapter = new CustomAdapterWellness(getContext(), R.layout.list_item_wellness, wellnessHistory);

        // Set adapter ke ListView
        listView.setAdapter(adapter);

        LinearLayout layoutEmoji = view.findViewById(R.id.layoutEmoji);
        EditText editTextKeluhan = view.findViewById(R.id.editTextKeluhan);

        // Tambahkan listener pada setiap emoji untuk memasukkan perasaan
        layoutEmoji.findViewById(R.id.menu_marah).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                perasaanSelected = "Marah";
            }
        });

        layoutEmoji.findViewById(R.id.menu_kecewa).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                perasaanSelected = "Kecewa";
            }
        });

        layoutEmoji.findViewById(R.id.menu_sedih).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                perasaanSelected = "Sedih";
            }
        });

        layoutEmoji.findViewById(R.id.menu_senang).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                perasaanSelected = "Senang";
            }
        });

        // Tambahkan listener untuk tombol Kirim
        Button buttonWellness = view.findViewById(R.id.buttonWellness);
        buttonWellness.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // Ambil nilai keluhan
                keluhan = editTextKeluhan.getText().toString();
                // Cek jika perasaan sudah dipilih
                if (perasaanSelected.isEmpty()) {
                    // Tampilkan toast jika emoji belum dipilih
                    Toast.makeText(getContext(), "Silakan pilih emoji terlebih dahulu", Toast.LENGTH_SHORT).show();
                }
                // Cek jika keluhan tidak kosong
                else if (keluhan.isEmpty()) {
                    // Tampilkan toast jika catatan belum diisi
                    Toast.makeText(getContext(), "Silakan isi catatan terlebih dahulu", Toast.LENGTH_SHORT).show();
                }
                // Jika perasaan dipilih dan keluhan diisi
                else {
                    // Simpan data perasaan dan keluhan ke database Firebase
                    saveWellnessData(perasaanSelected, keluhan);
                    // Reset nilai perasaanSelected dan keluhan setelah disimpan
                    perasaanSelected = "";
                    keluhan = "";
                    // Kosongkan input keluhan
                    editTextKeluhan.setText("");
                    // Menampilkan toast setelah data berhasil disimpan
                    Toast.makeText(getContext(), "Data wellness berhasil disimpan", Toast.LENGTH_SHORT).show();
                }
            }
        });

        wellnessRef.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                wellnessHistory.clear();
                String loggedInUsername = getUsername(); // Mendapatkan username pengguna yang sedang login
                for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
                    WellnessData wellnessData = snapshot.getValue(WellnessData.class);
                    if (wellnessData != null && wellnessData.getUsername().equals(loggedInUsername)) {
                        String history = "Perasaan " + wellnessData.getPerasaan() + "\n" + wellnessData.getKeluhan() + "\n" + wellnessData.getTanggal();
                        wellnessHistory.add(0, history); // Tambahkan ke indeks 0
                    }
                }
                adapter.notifyDataSetChanged();
            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {
                // Handle database error
            }
        });


        return view;
    }

    private void saveWellnessData(String perasaan, String keluhan) {
        // Mendapatkan tanggal dan waktu saat ini dalam format yang diinginkan
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault());
        String currentDate = dateFormat.format(Calendar.getInstance().getTime());

        // Simpan data perasaan dan keluhan ke database Firebase
        wellnessRef.push().setValue(new WellnessData(getUsername(), perasaan, currentDate, keluhan));
    }

    private String getUsername() {
        // Mendapatkan username dari Shared Preferences
        return getActivity().getSharedPreferences("loginPrefs", AppCompatActivity.MODE_PRIVATE)
                .getString("username", null);
    }
}
