package com.example.punyaria;

import android.content.Intent;
import android.content.SharedPreferences;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;

import androidx.appcompat.app.AppCompatActivity;

import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Locale;
import java.util.Map;

public class KonselingActivity extends AppCompatActivity {

    private Button buttonKonseling;
    private EditText editTextTopik;
    private EditText editTextKeluhan;
    private String username; // Menyimpan username pengguna yang sedang login
    private Uri imageUrl; // Menyimpan URL gambar yang dipilih

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

        ImageView headerImageView = findViewById(R.id.headerImageView);
        headerImageView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                onBackPressed();
            }
        });

        // Inisialisasi button konseling
        buttonKonseling = findViewById(R.id.buttonKonseling);

        // Inisialisasi EditText topik dan keluhan
        editTextTopik = findViewById(R.id.editTextTopik);
        editTextKeluhan = findViewById(R.id.editTextKeluhan);

        // Menambahkan listener klik pada EditText topik
        editTextTopik.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // Tampilkan dialog konseling
                showKonselingDialog();
            }
        });

        // Menerima informasi topik dari intent
        String topic = getIntent().getStringExtra("TOPIC");

        // Set text editTextTopik sesuai dengan topik yang dipilih
        editTextTopik.setText(topic);

        // Menambahkan listener klik pada tombol konseling
        buttonKonseling.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // Memeriksa apakah topik dan keluhan telah terisi
                if (isDataValid()) {
                    // Simpan data konseling ke Firebase dan lanjutkan ke ChatActivity
                    String konselingID = saveKonselingData();
                    sendAutomaticMessage(konselingID);
                    goToChatActivity(konselingID);
                }
            }
        });

        // Mendapatkan username pengguna saat login
        username = getUsername();
    }

    // Method untuk memeriksa apakah topik dan keluhan telah terisi
    private boolean isDataValid() {
        String topik = editTextTopik.getText().toString();
        String keluhan = editTextKeluhan.getText().toString();

        if (topik.isEmpty()) {
            editTextTopik.setError("Topik harus diisi");
            editTextTopik.requestFocus();
            return false;
        } else if (keluhan.isEmpty()) {
            editTextKeluhan.setError("Keluhan harus diisi");
            editTextKeluhan.requestFocus();
            return false;
        }

        return true;
    }

    // Method untuk menyimpan data konseling ke Firebase
    private String saveKonselingData() {
        // Ambil topik dan keluhan dari EditText
        String topik = editTextTopik.getText().toString();
        String keluhan = editTextKeluhan.getText().toString();

        // Ambil waktu saat ini
        String currentDate = getCurrentDateTime();

        // Lakukan penyimpanan data ke Firebase
        DatabaseReference databaseRef = FirebaseDatabase.getInstance().getReference("konseling");
        Konseling konseling = new Konseling(username, topik, keluhan, currentDate);
        DatabaseReference newKonselingRef = databaseRef.push();
        newKonselingRef.setValue(konseling);

        // Mengembalikan ID konseling yang baru disimpan
        return newKonselingRef.getKey();
    }

    // Method untuk mendapatkan waktu saat ini
    private String getCurrentDateTime() {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault());
        return sdf.format(new Date());
    }

    // Method untuk mendapatkan username pengguna
    private String getUsername() {
        // Implementasikan sesuai dengan cara Anda mendapatkan username pengguna, misalnya dari SharedPreferences, Firebase Authentication, dsb.
        // Contoh sederhana:
        SharedPreferences sharedPreferences = getSharedPreferences("loginPrefs", MODE_PRIVATE);
        return sharedPreferences.getString("username", null);
    }

    // Method untuk menampilkan KonselingDialog
    private void showKonselingDialog() {
        KonselingDialog konselingDialog = new KonselingDialog(KonselingActivity.this, new KonselingDialog.KonselingDialogListener() {
            @Override
            public void onKonselingSelected(String konseling) {
                editTextTopik.setText(konseling);
            }
        });
        konselingDialog.show();
    }

    // Method untuk pindah ke ChatActivity dengan membawa ID konseling
    private void goToChatActivity(String konselingID) {
        // Simpan KONSELING_ID ke SharedPreferences
        SharedPreferences.Editor editor = getSharedPreferences("loginPrefs", MODE_PRIVATE).edit();
        editor.putString("KONSELING_ID", konselingID);
        editor.apply();

        // Buat intent dan mulai aktivitas ChatActivity
        Intent intent = new Intent(KonselingActivity.this, ChatActivity.class);
        startActivity(intent);
        finish(); // Sebaiknya lakukan finish activity agar tidak kembali ke activity ini saat tombol back ditekan dari ChatActivity
    }


    // Method untuk mengirim pesan otomatis setelah konseling dibuat
    private void sendAutomaticMessage(String konselingID) {
        // Pesan otomatis
        String message = "Saya ingin konseling dengan topik  " + editTextTopik.getText().toString() + ", permasalahan yang sedang saya alami yaitu " + editTextKeluhan.getText().toString();

        // Ambil waktu saat ini
        String currentTime = getCurrentDateTime();

        // Simpan pesan otomatis ke Firebase
        DatabaseReference chatRef = FirebaseDatabase.getInstance().getReference("chats").child(konselingID);
        Map<String, Object> chatMessageMap = new HashMap<>();
        chatMessageMap.put("username", username);
        chatMessageMap.put("message", message);
        chatMessageMap.put("timestamp", currentTime);
        chatMessageMap.put("konselingID", konselingID);
        chatMessageMap.put("imageUrl", imageUrl != null ? imageUrl.toString() : ""); // Tetapkan imageUrl jika tidak null, jika null, tetapkan ke string kosong
        chatRef.push().setValue(chatMessageMap);
    }


}
