//package com.njcn.relational.utils;
//
//import org.springframework.stereotype.Component;
//
//import java.io.BufferedReader;
//import java.io.FileReader;
//import java.io.IOException;
//
//import java.text.ParseException;
//import java.text.SimpleDateFormat;
//import java.util.*;
//
//@Component
//public class PowerDataParser {
//
//    private static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd");
//    private static final SimpleDateFormat DATE_TIME_FORMAT = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//
//    public List<Map<String, Object>> parseFile(String filePath) throws IOException {
//        List<Map<String, Object>> result = new ArrayList<>();
//
//        try (BufferedReader reader = new BufferedReader(new FileReader(filePath))) {
//            String line;
//            boolean inDataBlock = false;
//            String[] headers = null;
//            String[] types = null;
//
//            while ((line = reader.readLine()) != null) {
//                line = line.trim();
//
//                if (line.startsWith("@DATA_BLOCK")) {
//                    inDataBlock = true;
//                    continue;
//                }
//
//                if (line.startsWith("</r_stat_data_v_d>")) {
//                    break;
//                }
//
//                if (!inDataBlock) continue;
//
//                if (line.startsWith("%")) {
//                    // 数据类型定义行
//                    types = line.substring(1).split(",");
//                }else if(line.startsWith("/@")){
//                    headers = line.substring(2).split(",");
//                } else if (line.startsWith("#")) {
//                    // 数据行
//                    String[] values = line.substring(1).split(",");
//                    Map<String, Object> data = parseDataLine(headers, types, values);
//                    if (data != null) {
//                        result.add(data);
//                    }
//                }
//            }
//        }
//
//        return result;
//    }
//
//
//    public Map<String, List<Map<String, Object>>> parseMultiTableFile(String filePath) throws IOException {
//        Map<String, List<Map<String, Object>>> result = new LinkedHashMap<>();
//        String currentTable = null;
//        List<Map<String, Object>> currentData = null;
//        String[] headers = null;
//        String[] types = null;
//
//        try (BufferedReader reader = new BufferedReader(new FileReader(filePath))) {
//            String line;
//            while ((line = reader.readLine()) != null) {
//                line = line.trim();
//                // 识别表开始标记
//                if (line.startsWith("<") && line.contains("::")) {
//                    currentTable = line.substring(line.indexOf("::") + 2, line.indexOf(">"));
//                    currentData = new ArrayList<>();
//                    result.put(currentTable, currentData);
//                    continue;
//                }
//
//                if (currentTable == null) continue;
//
//                // 数据块开始
//                if (line.startsWith("@DATA_BLOCK")) {
//                    headers = null;
//                    types = null;
//                    continue;
//                }
//
//                // 数据块结束
//                if (line.startsWith("</")) {
//                    currentTable = null;
//                    currentData = null;
//                    continue;
//                }
//
//                if (line.startsWith("%")) {
//                    types = line.substring(1).split(",");
//                } else if (line.startsWith("/@")) {
//                    headers = line.substring(2).split(",");
//                } else if (line.startsWith("#")) {
//                    if (headers != null && types != null) {
//                        String[] values = line.substring(1).split(",");
//                        Map<String, Object> data = parseDataLine(headers, types, values);
//                        if (data != null && currentData != null) {
//                            currentData.add(data);
//                        }
//                    }
//                }
//            }
//        }
//        return result;
//    }
//
//
//
//    private Map<String, Object> parseDataLine(String[] headers, String[] types, String[] values) {
//        if (headers == null || types == null || values == null ||
//                headers.length != values.length || headers.length != types.length) {
//            return null;
//        }
//
//        Map<String, Object> data = new HashMap<>();
//
//        for (int i = 0; i < headers.length; i++) {
//            String field = headers[i].trim();
//            String type = types[i].trim();
//            String value = values[i].trim();
//
//            try {
//                if("-".equals(value)){
//                    data.put(field, null);
//                    continue;
//                }
//                Object parsedValue = parseValue(value, type);
//                data.put(field, parsedValue);
//            } catch (ParseException e) {
//                System.err.println("Error parsing value '" + value + "' for field '" + field + "' with type '" + type + "'");
//                data.put(field, null);
//            }
//        }
//
//        return data;
//    }
//
//    private Object parseValue(String value, String type) throws ParseException {
//        if (value == null || value.isEmpty() || "0E-8".equals(value)) {
//            return getDefaultValue(type);
//        }
//
//        switch (type.toUpperCase()) {
//            case "DATE":
//                return DATE_FORMAT.parse(value);
//            case "DATETIME":
//                return DATE_TIME_FORMAT.parse(value);
//            case "INT":
//                return Integer.parseInt(value);
//            case "DECIMAL":
//                return Double.parseDouble(value);
//            case "VARCHAR":
//                return value;
//            default:
//                return value;
//        }
//    }
//
//    private Object getDefaultValue(String type) {
//        switch (type.toUpperCase()) {
//            case "DATE":
//            case "DATETIME":
//                return null;
//            case "INT":
//                return 0;
//            case "DECIMAL":
//                return 0.0;
//            case "VARCHAR":
//                return "";
//            default:
//                return null;
//        }
//    }
//}
