package com.example.androidgpt;

import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

public class MainActivity extends AppCompatActivity {

    private static final String TAG = "MainActivity"; // Логгер для отладки
    private EditText userPrompt;
    private TextView responseText;
    private RequestQueue requestQueue;

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

        userPrompt = findViewById(R.id.userPrompt);
        Button sendButton = findViewById(R.id.sendButton);
        responseText = findViewById(R.id.responseText);

        requestQueue = Volley.newRequestQueue(this);

        sendButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                try {
                    sendPredictRequestWithRetries(userPrompt.getText().toString());
                } catch (JSONException e) {
                    Log.e(TAG, "Ошибка создания JSON-запроса", e);
                    responseText.setText("Ошибка при создании данных запроса: " + e.getMessage());
                }
            }
        });
    }

    // Метод для отправки предсказаний с использованием повторных попыток
    private void sendPredictRequestWithRetries(String inputString) throws JSONException {
        final String url = "https://yuntian-deng-chatgpt4.hf.space/call/predict";
        final JSONObject jsonRequest = new JSONObject();
        JSONArray dataArray = new JSONArray();

        dataArray.put(inputString);
        dataArray.put(0);
        dataArray.put(0);
        dataArray.put(3);

        JSONArray innerArray = new JSONArray();
        innerArray.put("Hello!");
        innerArray.put(JSONObject.NULL);
        JSONArray chatbotArray = new JSONArray();
        chatbotArray.put(innerArray);
        dataArray.put(chatbotArray);

        jsonRequest.put("data", dataArray);

        Log.d(TAG, "Отправляем на сервер: " + jsonRequest.toString());

        final StringRequest stringRequest = new StringRequest(Request.Method.POST, url,
                new Response.Listener<String>() {
                    @Override
                    public void onResponse(String response) {
                        try {
                            JSONObject jsonResponse = new JSONObject(response);
                            String eventId = jsonResponse.getString("event_id");
                            Log.d(TAG, "Идентификатор события получен: " + eventId);
                            // Увеличение задержки перед fetchEventResult
                            fetchEventResult(eventId, 5000); // Увеличено до 5000 миллисекунд
                        } catch (JSONException e) {
                            Log.e(TAG, "Ошибка при извлечении event_id", e);
                            responseText.setText("Ошибка при обработке event_id: " + e.getMessage());
                        }
                    }
                },
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        handleErrorResponse(error, "POST запрос");
                    }
                }) {
            @Override
            public byte[] getBody() throws com.android.volley.AuthFailureError {
                return jsonRequest.toString().getBytes();
            }

            @Override
            public String getBodyContentType() {
                return "application/json";
            }
        };

        requestQueue.add(stringRequest);
    }

    private void fetchEventResult(final String eventId, final int delayMillis) {
        final String url = "https://yuntian-deng-chatgpt4.hf.space/call/predict/" + eventId;
        Log.d(TAG, "Запрашиваем результаты для event_id: " + eventId);

        responseText.postDelayed(new Runnable() {
            @Override
            public void run() {
                startFetchingResult(url, eventId);
            }
        }, delayMillis);
    }

    private void startFetchingResult(final String url, final String eventId) {
        StringRequest stringRequest = new StringRequest(Request.Method.GET, url,
                new Response.Listener<String>() {
                    @Override
                    public void onResponse(String response) {
                        Log.d(TAG, "Получен ответ от сервера: " + response);
                        if (response.contains("event: error")) {
                            Log.e(TAG, "Ошибка обработки event_id: " + eventId);
                            responseText.setText("Ошибка: 404: Session not found.");
                        } else {
                            try {
                                JSONObject jsonResponse = new JSONObject(response);
                                processSuccessResponse(jsonResponse);
                            } catch (JSONException e) {
                                Log.e(TAG, "Ошибка при обработке окончательного ответа", e);
                                responseText.setText("Ошибка при обработке окончательного ответа: " + e.getMessage());
                            }
                        }
                    }
                },
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        handleErrorResponse(error, "при GET запросе");
                    }
                });

        requestQueue.add(stringRequest);
    }

    // Метод для обработки успешного ответа
    private void processSuccessResponse(JSONObject jsonResponse) {
        try {
            if (jsonResponse.has("data")) {
                JSONArray results = jsonResponse.getJSONArray("data");
                if (results != null && results.length() == 4) {
                    String value4 = results.getString(0);
                    int value16 = results.getInt(1);
                    String statusCode = results.getString(2);
                    String returnedString = results.getString(3);

                    responseText.setText("Value 4: " + value4 + "\n" +
                            "Value 16: " + value16 + "\n" +
                            "Status Code: " + statusCode + "\n" +
                            "Returned String: " + returnedString);
                }
            } else {
                responseText.setText("JSON не содержит данных: " + jsonResponse.toString());
            }
        } catch (JSONException e) {
            Log.e(TAG, "Ошибка при обработке данных", e);
            responseText.setText("Ошибка при обработке данных: " + e.getMessage());
        }
    }

    // Обработчик ошибок при HTTP запросах
    private void handleErrorResponse(VolleyError error, String requestType) {
        String errorMessage = "Ошибка " + requestType + ": ";
        if (error.networkResponse != null) {
            errorMessage += "Код ошибки: " + error.networkResponse.statusCode + "\n";
            if (error.networkResponse.data != null) {
                errorMessage += "Ответ сервера: " + new String(error.networkResponse.data) + "\n";
            }
        }
        if (error.getCause() != null) {
            errorMessage += "Причина: " + error.getCause().toString();
        }
        Log.e(TAG, errorMessage, error);
        responseText.setText(errorMessage);
    }
} почему не работает