package sq.code.wuai;

import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;

import androidx.appcompat.app.AppCompatActivity;

import com.google.android.material.button.MaterialButton;
import com.google.android.material.textfield.TextInputEditText;
import com.google.android.material.textfield.TextInputLayout;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {

    private TextInputLayout tilDomain;
    private TextInputLayout tilLicense;
    private TextInputEditText etDomain;
    private TextInputEditText etLicense;
    private MaterialButton btnQuery;
    private TextView tvResultTitle;
    private ListView lvResult;
    private ProgressBar progressLoading;

    private static final String API_URL = "https://apiv1.sq.xinghuyun.cn/chaxun.php";

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

        tilDomain = findViewById(R.id.tilDomain);
        tilLicense = findViewById(R.id.tilLicense);
        etDomain = findViewById(R.id.etDomain);
        etLicense = findViewById(R.id.etLicense);
        btnQuery = findViewById(R.id.btnQuery);
        tvResultTitle = findViewById(R.id.tvResultTitle);
        lvResult = findViewById(R.id.lvResult);
        progressLoading = new ProgressBar(this);
        progressLoading.setIndeterminate(true);

        btnQuery.setOnClickListener(v -> {
            if (!checkInput()) return;
            queryAsync();
        });
    }

    private boolean checkInput() {
        String domain = etDomain.getText() != null ? etDomain.getText().toString().trim() : "";
        String license = etLicense.getText() != null ? etLicense.getText().toString().trim() : "";

        if (TextUtils.isEmpty(domain) || TextUtils.isEmpty(license)) {
            Toast.makeText(this, R.string.error_empty, Toast.LENGTH_SHORT).show();
            return false;
        }
        return true;
    }

    private void queryAsync() {
        btnQuery.setEnabled(false);
        btnQuery.setText(R.string.loading);

        new Thread(() -> {
            try {
                String domain = etDomain.getText().toString().trim();
                String license = etLicense.getText().toString().trim();

                String postData = "license_code=" + URLEncoder.encode(license, "UTF-8")
                        + "&domain=" + URLEncoder.encode(domain, "UTF-8");

                URL url = new URL(API_URL);
                HttpURLConnection conn = (HttpURLConnection) url.openConnection();
                conn.setRequestMethod("POST");
                conn.setDoOutput(true);
                conn.setConnectTimeout(15000);
                conn.setReadTimeout(15000);
                conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");

                try (OutputStream os = conn.getOutputStream()) {
                    os.write(postData.getBytes("UTF-8"));
                    os.flush();
                }

                int code = conn.getResponseCode();
                String response;
                if (code >= 200 && code < 300) {
                    StringBuilder sb = new StringBuilder();
                    try (BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"))) {
                        String line;
                        while ((line = br.readLine()) != null) sb.append(line);
                    }
                    response = sb.toString();
                } else {
                    StringBuilder errSb = new StringBuilder();
                    try (BufferedReader br = new BufferedReader(new InputStreamReader(conn.getErrorStream(), "UTF-8"))) {
                        String line;
                        while ((line = br.readLine()) != null) errSb.append(line);
                    }
                    response = errSb.toString();
                }

                String finalResponse = response;
                runOnUiThread(() -> handleResult(finalResponse));
            } catch (Exception e) {
                runOnUiThread(() -> {
                    resetButton();
                    Toast.makeText(this, R.string.error_network, Toast.LENGTH_SHORT).show();
                });
            }
        }).start();
    }

    private void handleResult(String raw) {
        resetButton();

        List<ResultItem> items = parseResponse(raw);
        if (items.isEmpty()) {
            Toast.makeText(this, R.string.error_network, Toast.LENGTH_SHORT).show();
            return;
        }

        tvResultTitle.setVisibility(View.VISIBLE);
        lvResult.setVisibility(View.VISIBLE);
        lvResult.setAdapter(new ResultAdapter(items));
    }

    private List<ResultItem> parseResponse(String raw) {
        List<ResultItem> list = new ArrayList<>();
        if (raw == null || raw.trim().isEmpty()) return list;

        // 尝试解析可能为 JSON 或普通文本
        String text = raw.trim();
        if (text.startsWith("{") && text.contains(":")) {
            list.add(new ResultItem("查询结果", text));
        } else {
            String[] lines = text.split("\n");
            for (String line : lines) {
                line = line.trim();
                if (!line.isEmpty()) {
                    list.add(new ResultItem("查询结果", line));
                }
            }
        }
        return list;
    }

    private void resetButton() {
        btnQuery.setEnabled(true);
        btnQuery.setText(R.string.btn_query);
    }

    static class ResultItem {
        String title;
        String detail;

        ResultItem(String title, String detail) {
            this.title = title;
            this.detail = detail;
        }
    }

    private class ResultAdapter extends BaseAdapter {
        private final List<ResultItem> items;

        ResultAdapter(List<ResultItem> items) {
            this.items = items;
        }

        @Override
        public int getCount() {
            return items.size();
        }

        @Override
        public Object getItem(int position) {
            return items.get(position);
        }

        @Override
        public long getItemId(int position) {
            return position;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            if (convertView == null) {
                convertView = getLayoutInflater().inflate(R.layout.item_result, parent, false);
            }
            ImageView ivStatus = convertView.findViewById(R.id.ivStatus);
            TextView tvTitle = convertView.findViewById(R.id.tvTitle);
            TextView tvDetail = convertView.findViewById(R.id.tvDetail);

            ResultItem item = items.get(position);
            tvTitle.setText(item.title);
            tvDetail.setText(item.detail);

            String lower = item.detail != null ? item.detail.toLowerCase() : "";
            if (lower.contains("成功") || lower.contains("success") || lower.contains("有效") || lower.contains("active")) {
                ivStatus.setImageResource(R.drawable.ic_success);
            } else if (lower.contains("失败") || lower.contains("error") || lower.contains("无效") || lower.contains("expire")) {
                ivStatus.setImageResource(R.drawable.ic_fail);
            } else {
                ivStatus.setImageResource(R.drawable.ic_info);
            }

            return convertView;
        }
    }
}