package com.example.tampopo_client.views;

import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageButton;
import androidx.activity.EdgeToEdge;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat.Type;
import androidx.lifecycle.ViewModelProvider;
import com.example.tampopo_client.R;
import com.example.tampopo_client.Tampopo;
import com.example.tampopo_client.viewmodels.ChatViewModel;

public class ChatActivity extends AppCompatActivity {

  private ChatViewModel chatroomViewModel;

  //メンバー変数
  private EditText senderMessage;
  private EditText receiverMessage;
  private Button sendButton;
  private Button backButton;

  Tampopo tampopo;



  @Override
  protected void onCreate(Bundle savedInstanceState) {
    tampopo = (Tampopo)getApplication();

    super.onCreate(savedInstanceState);//Activityの基本的な初期化処理
    EdgeToEdge.enable(this);//画面の端っこまで使う(Edge-to-Edge)表示
    setContentView(R.layout.activity_chat);//表示する画面のレイアウトXMLファイル(activity_chat.xml)を指定

    chatroomViewModel = new ViewModelProvider(this).get(ChatViewModel.class);

    senderMessage = findViewById(R.id.sender_message);
    receiverMessage = findViewById(R.id.receiver_message);
    sendButton = findViewById(R.id.send_Button);
    ImageButton backButton = findViewById(R.id.back_Button);

    receiverMessage.setKeyListener(null);//受信メッセージ編集不可

//    buttonSend.setOnClickListener(new OnClickListener() {
//      @Override
//      public void onClick(View view) {
//        String receiverText = receiverMessage.getText().toString();//receiverMessageにユーザーが入力した文字を取り出して、String型の 変数receiverText に入れる
//        if (!receiverText.isEmpty()) {
//          String senderId = tampopo.getUserId();
//          String token = tampopo.getToken();
//          ChatroomViewModel.loadLatestMessage(null, senderId, token);
//          receiverMessage.setText(receiverText);//受信欄に表示
//          senderMessage.setText("");//送信欄をクリア
//        }
//      }
//    });

//    Intent intent = getIntent();
//    String friendId = intent.getStringExtra("friendId");
//    String chatroomId = intent.getStringExtra("chatroomId");



    String myId = tampopo.getUserId();
    String friendId = tampopo.getChatFriendId();
    String chatroomId = tampopo.getChatroomId();
    //String chatroomId = "0";
    String token = tampopo.getToken();

    // chatroomViewModel.enterChatroom(myId, friendId, token);

    //Log.d("ChatDebug", "チャット相手ID: " + friendId);
    Log.d("ChatDebug", "チャットルームID: " + chatroomId);


//    chatroomViewModel.getChatroomIdLiveData().observe(this, id -> {
//      if (id != null) {
//        tampopo.setChatroomId(id);
//        System.out.println("チャットルーム作成完了！ ID: " + id);
//      } else {
//        System.out.println("チャットルーム作成に失敗しました");
//      }
//    });


    //メッセージ送信
    sendButton.setOnClickListener(new OnClickListener() { //sendButtonがクリックされたときの処理
      @Override
      public void onClick(View view) { //ボタンがクリックされたときに実行される処理本体
        String senderText = senderMessage.getText().toString(); //senderMessageにユーザーが入力した文字を取り出して、String型の 変数receiverText に入れる
        Log.d("ChatDebug", senderText);
          if (!senderText.isEmpty()) { //senderTextが空でなければ
            String senderId = tampopo.getUserId();
            String token = tampopo.getToken();
            String chatroomId = tampopo.getChatroomId();
            //String chatroomId = "0";
            chatroomViewModel.sendMessage(chatroomId, senderId, senderText, token);
            senderMessage.setText(senderText);//自分のメッセージを送信欄に表示
          }
      }
    });


    //メッセージ受信
    chatroomViewModel.getLatestMessageLiveData().observe(this, chatMessage -> {
      if (chatMessage != null) {
        String myUserId = tampopo.getUserId(); // 自分のIDを取得
        String senderId = chatMessage.getSenderId(); //相手(メッセージ送信者)のIDを取得

        if (!myUserId.equals(senderId)) { //自分のIDが相手のIDと異なっていれば,(相手からのメッセージと判断)
          receiverMessage.setText(chatMessage.getContent());// 相手からのメッセージを受信欄に表示
        }
      }
    });


    //戻るボタン
    backButton.setOnClickListener(new OnClickListener() { //backButtonがクリックされたときの処理
      public void onClick(View view) { //ボタンがクリックされたときに実行される処理本体
        Intent intent = new Intent(ChatActivity.this, MainActivity.class); //ChatActivity から MainActivity に画面遷移
        startActivity(intent);
      }
    });


    ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main), (v, insets) -> {
      Insets systemBars = insets.getInsets(Type.systemBars());
      v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom);
      return insets;
    });


  }

}
