package me.bell;


import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;

public class HttpUtil {

    /**
     * 正常访问股票数据（重复请求）
     *
     * @param stockID
     * @return
     * @throws IOException
     */
    public static ArrayList<StockData> StockHttp(String stockID) throws IOException {

        String result = httpRequest(stockID);

        if (result.length() > 0) {
            return getCurrentStock(result);
        } else {
            return null;
        }

    }

    /**
     * 判断股票代码是否存在 返回正确的代码
     *
     * @param code
     * @return
     * @throws IOException
     */
    public static boolean verifyCode(String code) {
        try {

            String result = httpRequest(code);
			/*if (!result1.contains("FAILED") && !result1.endsWith("=")) {
				return code;
			}

			String result2 = httpRequest("sh" + code);
			if (!result2.contains("FAILED") && !result2.endsWith("=")) {
				return "sh" + code;
			}

			String result3 = httpRequest("sz" + code);
			if (!result3.contains("FAILED") && !result3.endsWith("=")) {
				return "sz" + code;
			}*/

            if (!result.contains("\"results\":[]")) {
                return true;
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
        return false;

    }

    /**
     * 处理网页返回的股票数据
     *
     * @param result
     * @return
     */
    public static ArrayList<StockData> getCurrentStock(String result) {
        try {
            ArrayList<StockData> list = new ArrayList<>();

            JSONObject jsonObject = JSONObject.parseObject(result);
            JSONArray jsonArray = jsonObject.getJSONArray("results");
            if (jsonObject.getIntValue("errorNo") == 0 && null != jsonArray) {
                for (int i = 0; i < jsonArray.size(); i++) {
                    JSONArray subArray = jsonArray.getJSONArray(i);
                    StockData data = new StockData();
                    data.setName(String.valueOf(subArray.get(0)));
                    data.setCode2(String.valueOf(subArray.get(1)));
                    data.setPrice(getBigDecimal(subArray.get(2)));
                    data.setMax(getBigDecimal(subArray.get(3)));
                    data.setMin(getBigDecimal(subArray.get(4)));
                    data.setCode1(String.valueOf(subArray.get(9)));
                    data.setEarn(getBigDecimal(subArray.get(11)));
                    data.setPercent(getBigDecimal(subArray.get(12)));
                    list.add(data);
                }

//				System.out.println(JSON.toJSONString(list));
            }


            return list;

        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    public static BigDecimal getBigDecimal(Object value) {
        BigDecimal ret = null;
        if (value != null) {
            if (value instanceof BigDecimal) {
                ret = (BigDecimal) value;
            } else if (value instanceof String) {
                ret = new BigDecimal((String) value);
            } else if (value instanceof BigInteger) {
                ret = new BigDecimal((BigInteger) value);
            } else if (value instanceof Number) {
                ret = new BigDecimal(((Number) value).doubleValue());
            } else {
                throw new ClassCastException("Not possible to coerce [" + value + "] from class " + value.getClass() + " into a BigDecimal.");
            }
        }
        return ret;
    }

    /**
     * 请求网页内容
     *
     * @param stockID
     * @return
     * @throws IOException
     */
    public static String httpRequest(String stockID) throws IOException {
//		URL url = new URL("http://hq.sinajs.cn/format=text&list=" + stockID); // sz000838
        URL url = new URL("https://hq.cmschina.com/market/json?funcno=20000&version=1&stock_list=" + stockID);

        HttpURLConnection connection = (HttpURLConnection) url.openConnection();
        connection.setRequestProperty("Content-type", "application/json; charset=UTF-8");
        InputStream inputStream = connection.getInputStream();
        InputStreamReader isr = new InputStreamReader(inputStream, "utf-8");// 添加这一句话设置相应编码格式

        BufferedReader br = new BufferedReader(isr);
        String temp = null;
        String result = "";
        while ((temp = br.readLine()) != null) {
            result += temp;
        }

        return result;
    }
}