package com.sagacloud.endpoints;

import com.sagacloud.json.JSONArray;
import com.sagacloud.json.JSONObject;
import com.sagacloud.json.JSONValue;
import com.sagacloud.utils.*;
import com.sagacloud.utils.tables.HBaseTable;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.MediaType;
import java.util.Arrays;

//@Path("energy")
public class EnergySystem {
//    private static final Logger log = LoggerFactory.getLogger(EnergySystem.class);
//
//    @Path("/report/create")
//    @POST
//    @Produces(MediaType.APPLICATION_JSON)
//    public String createData(@QueryParam(Const.PROJECT_ID) String projectId, String jsonStr) {
//        JSONObject json = (JSONObject) JSONValue.parse(jsonStr);
//        JSONArray criterias = (JSONArray) json.get("criterias");
//        CommonUtil.addField(criterias, "project_id", projectId.substring(2));
//
//        try {
//            JSONArray keyCriterias = (JSONArray) JSONValue.parse(criterias.toString());
//            JSONArray setsNode = new JSONArray();
//            for(int i = 0; i < keyCriterias.size(); ++i){
//                JSONObject obj = (JSONObject) keyCriterias.get(i);
//                JSONObject set = new JSONObject();
//                set.put("data",obj.get("data"));
//                obj.remove("data");
//                setsNode.add(set);
//            }
//            CommonUtil.removeField(keyCriterias, "data");
//            JSONObject counts = getCount(true, HBaseTable.report_data, keyCriterias);
//            JSONArray existedContent = (JSONArray) counts.get(Const.JSON_FIELD_Content);
//            for (int i = existedContent.size()-1; i >=0; --i) {
//                if (((JSONObject) existedContent.get(i)).getLongValue("Count") > 0) {
//                    criterias.remove(i);
//                }else{
//                    keyCriterias.remove(i);
//                    setsNode.remove(i);
//                }
//            }
//            insert(true, HBaseTable.report_data, criterias);
//            update(true,HBaseTable.report_data,keyCriterias,setsNode);
//            return DpUtils.successJsonMsg("");
//        } catch (Exception e) {
//            e.printStackTrace();
//            return DpUtils.errorJsonMsg("插入数据失败");
//        }
//    }
//
//    @Path("/report/delete")
//    @POST
//    @Produces(MediaType.APPLICATION_JSON)
//    public String deleteData(@QueryParam(Const.PROJECT_ID) String projectId, String jsonStr) {
//        JSONObject json = (JSONObject) JSONValue.parse(jsonStr);
//        json = (JSONObject) json.get("criteria");
//        json.put("project_id", projectId.substring(2));
//        try {
//            delete(false, HBaseTable.report_data, json);
//            return DpUtils.successJsonMsg("");
////            return result.toString();
//        } catch (Exception e) {
//            e.printStackTrace();
//            return DpUtils.errorJsonMsg("删除数据失败");
//        }
//    }
//
//    @Path("/report/query")
//    @POST
//    @Produces(MediaType.APPLICATION_JSON)
//    public String queryData(@QueryParam(Const.PROJECT_ID) String projectId, String jsonStr) {
//        JSONObject json = (JSONObject) JSONValue.parse(jsonStr);
//        json = (JSONObject) json.get("criteria");
//        String[] keys = {"is_original", "meter", "funcid", "time"};
//        for (String key : keys) {
//            if (!json.containsKey(key))
//                return DpUtils.errorJsonMsg("需包含字段：" + key);
//        }
//        json.put("project_id", projectId.substring(2));
//        try {
//            JSONObject result = query(false, HBaseTable.report_data, json);
//            return DpUtils.returnJSONArray((JSONArray) result.get(Const.JSON_FIELD_Content), "");
////            return result.toString();
//        } catch (Exception e) {
//            e.printStackTrace();
//            return DpUtils.errorJsonMsg("查询出错");
//        }
//    }
//
//    @Path("/meter-map/create")
//    @POST
//    @Produces(MediaType.APPLICATION_JSON)
//    public String createMeter(@QueryParam(Const.PROJECT_ID) String projectId, String jsonStr) {
//        JSONObject json = (JSONObject) JSONValue.parse(jsonStr);
//        JSONArray criterias = (JSONArray) json.get("criterias");
//        CommonUtil.addField(criterias, "project_id", projectId.substring(2));
//        try {
//            JSONArray faliureContent = new JSONArray();
//            JSONObject counts = getCount(true, HBaseTable.report_met_fun_map, criterias);
//            JSONArray existedContent = (JSONArray) counts.get(Const.JSON_FIELD_Content);
//            for (int i = 0; i < existedContent.size(); ++i) {
//                if (((JSONObject) existedContent.get(i)).getLongValue("Count") > 0) {
//                    faliureContent.add(criterias.get(i));
//                    criterias.remove(i);
//                    existedContent.remove(i);
//                    --i;
//                }
//            }
//            CommonUtil.removeField(faliureContent, "project_id");
//            insert(true, HBaseTable.report_met_fun_map, criterias);
//            return DpUtils.returnJSONArray(faliureContent, "已存在该数据");
//        } catch (Exception e) {
//            e.printStackTrace();
//            return DpUtils.errorJsonMsg("插入失败");
//        }
//    }
//
//    @Path("/meter-map/query")
//    @POST
//    @Produces(MediaType.APPLICATION_JSON)
//    public String queryMeter(@QueryParam(Const.PROJECT_ID) String projectId, String jsonStr) {
//        JSONObject json = (JSONObject) JSONValue.parse(jsonStr);
//        json = (JSONObject) json.get("criteria");
//        json.put("project_id", projectId.substring(2));
//        try {
//            JSONObject result = query(false, HBaseTable.report_met_fun_map, json);
//            JSONArray content = (JSONArray) result.get(Const.JSON_FIELD_Content);
//            CommonUtil.removeField(content,"project_id");
//            return DpUtils.returnJSONArray((JSONArray) result.get(Const.JSON_FIELD_Content), "");
////            return result.toString();
//        } catch (Exception e) {
//            e.printStackTrace();
//            return DpUtils.errorJsonMsg("查询失败");
//        }
//    }
//
//    @Path("/meter-map/delete")
//    @POST
//    @Produces(MediaType.APPLICATION_JSON)
//    public String deleteMeter(@QueryParam(Const.PROJECT_ID) String projectId, String jsonStr) {
//        JSONObject json = (JSONObject) JSONValue.parse(jsonStr);
//        json = (JSONObject) json.get("criteria");
//        json.put("project_id", projectId.substring(2));
//        try {
//            delete(false, HBaseTable.report_met_fun_map, json);
//            return DpUtils.successJsonMsg("");
////            return result.toString();
//        } catch (Exception e) {
//            e.printStackTrace();
//            return DpUtils.errorJsonMsg("删除失败");
//        }
//    }
//
//    public static JSONObject insert(boolean isBatchQuery, HBaseTable table, Object insertObjects) throws Exception {
//        JSONObject json = (JSONObject) JSONValue.parse("{\"QueryType\":\"insert\",\"Database\":\"db_public\"}");
//        if (isBatchQuery) {
//            json.put(Const.JSON_FIELD_QUERYTYPE, "batch_insert");
//            json.put(Const.JSON_FIELD_INSERTOBJECTS, insertObjects);
//        } else
//            json.put(Const.JSON_FIELD_INSERTOBJECT, insertObjects);
//        json.put(Const.FIELD_TABLE_NAME, table.name());
//        log.info(json.toString());
//        return ZillionAgentProvider.GetAgent().Query(json);
//    }
//
//    public static JSONObject delete(boolean isBatchQuery, HBaseTable table, Object criteria) throws Exception {
//        JSONObject json = (JSONObject) JSONValue.parse("{\"QueryType\":\"delete\",\"Database\":\"db_public\"}");
//        if (isBatchQuery) {
//            json.put(Const.JSON_FIELD_QUERYTYPE, "batch_delete");
//            json.put(Const.JSON_FIELD_CRITERIAS, criteria);
//        } else
//            json.put(Const.JSON_FIELD_CRITERIA, criteria);
//        json.put(Const.FIELD_TABLE_NAME, table.name());
//        log.info(json.toString());
//        return ZillionAgentProvider.GetAgent().Query(json);
//    }
//
//    public static JSONObject query(boolean isBatchQuery, HBaseTable table, Object criteria) throws Exception {
//        JSONObject json = (JSONObject) JSONValue.parse("{\"QueryType\":\"select\",\"Database\":\"db_public\"}");
//        if (isBatchQuery) {
//            json.put(Const.JSON_FIELD_QUERYTYPE, "batch_select");
//            json.put(Const.JSON_FIELD_CRITERIAS, criteria);
//        } else
//            json.put(Const.JSON_FIELD_CRITERIA, criteria);
//        json.put(Const.FIELD_TABLE_NAME, table.name());
//        log.info(json.toString());
//        return ZillionAgentProvider.GetAgent().Query(json);
//    }
//
//    public static JSONObject getCount(boolean isBatchQuery, HBaseTable table, Object criteria) throws Exception {
//        JSONObject json = (JSONObject) JSONValue.parse("{\"QueryType\":\"select_count\",\"Database\":\"db_public\"}");
//        if (isBatchQuery) {
//            json.put(Const.JSON_FIELD_QUERYTYPE, "batch_select_count");
//            json.put(Const.JSON_FIELD_CRITERIAS, criteria);
//        } else {
//            json.put(Const.JSON_FIELD_CRITERIA, criteria);
//        }
//        json.put(Const.FIELD_TABLE_NAME, table.name());
//        return ZillionAgentProvider.GetAgent().Query(json);
//
//    }
//
//    // 通用更新方法, isBatchQuery 是否批量更新, table 为所操作的表, criteria 为所查询的条件 可能为JSONArray(批量), 也可以是JSONObject (单个)
//    // set 为将要更新的内容 可能为JSONArray(批量), 也可以是JSONObject (单个)
//    public static JSONObject update(boolean isBatchQuery, HBaseTable table, Object criteria, Object set) throws Exception{
//        JSONObject json = (JSONObject) JSONValue.parse("{\"QueryType\":\"update\",\"Database\":\"db_public\"}");
//        if (isBatchQuery) {
//            json.put(Const.JSON_FIELD_QUERYTYPE, "batch_update");
//            json.put(Const.JSON_FIELD_CRITERIAS, criteria);
//            if(set instanceof JSONObject){
//                json.put(Const.JSON_FIELD_SET, set);
//            }else{
//                json.put(Const.JSON_FIELD_SETS, set);
//            }
//        } else{
//            json.put(Const.JSON_FIELD_CRITERIA, criteria);
//            json.put(Const.JSON_FIELD_SET, set);
//        }
//        json.put(Const.FIELD_TABLE_NAME, table.name());
//        log.info(json.toString());
//        return ZillionAgentProvider.GetAgent().Query(json);
//    }
}
