package com.app.intelligent.board.utils;

import com.app.intelligent.board.uikeyboard.KeyboardKeyItemModel;
import com.app.intelligent.board.uikeyboard.KeyboardActionResponseConfig;
import com.app.intelligent.board.uikeyboard.KeyboardResponseAreaLayout;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.LinkedHashMap;
import java.util.Map;

public class KeyboardConfigFileHandler {

    public static KeyboardActionResponseConfig initConfig(String path)  {
        String filePath = "keyboard.conf"; // 文件路径
        KeyboardActionResponseConfig config = parseConfig(path);
        return config;
    }

    public static KeyboardActionResponseConfig parseConfig(String filePath)   {
//        InputStream open = App.appInstance.getAssets().open(filePath);
        KeyboardActionResponseConfig config = new KeyboardActionResponseConfig();
        try (BufferedReader br = new BufferedReader(new FileReader(filePath))) {
            String line;
            KeyboardResponseAreaLayout currentLayout = null;
            while ((line = br.readLine()) != null) {
                line = line.trim();
                if (line.isEmpty()) {
                    continue; // 跳过空行
                }
                if (line.startsWith("Version:")) {
                    config.setVersion(line.split(":")[1].trim());
                } else if (line.startsWith("SupportLayouts:")) {
                    config.setSupportLayouts(line.split(":")[1].trim());
                } else if (line.startsWith("HideHint:")) {
                    config.setHideHint(Integer.parseInt(line.split(":")[1].trim()));
                } else if (line.startsWith("LayoutStyle:")) {
                    config.setLayoutStyle(line.split(":")[1].trim());
                } else if (line.equals("KeyDefault") || line.equals("KeyMarkDefault") || line.equals("KeyFuncDefault")) {
                    LinkedHashMap<String, String> maps = config.getMaps();
                    maps.put(line, "");
                } else if (line.contains(":") && currentLayout == null) {
                    String[] parts = line.split(":");
                    String keyName = parts[0].trim();
                    String keyValue = parts[1].trim();

                    String latestKey = null;
                    LinkedHashMap<String, String> maps = config.getMaps();
                    for (Map.Entry<String, String> entry : maps.entrySet()) {
                        latestKey = entry.getKey();
                    }
                    if (latestKey != null) {
                        maps.put(latestKey, keyValue);
                    }
                } else if (line.startsWith("Row")) {
                    currentLayout = new KeyboardResponseAreaLayout(line.split(":")[0].trim());
                    config.addLayout(currentLayout);
                } else if (currentLayout != null) {
                    if (line.equals("Key")) {
                        String[] parts = line.split(":");
                        String keyName = parts[0].trim();
                        KeyboardKeyItemModel keyModel = new KeyboardKeyItemModel(keyName);
                        currentLayout.addKey(keyModel);
                    } else if (line.contains(":") && currentLayout.getLastKey().getBackground() == null) {
                        // 解析按键的其他属性（如 Label）
                        String[] parts = line.split(":");
                        String keyName = parts[0].trim();
                        String keyValue = parts[1].trim();
                        KeyboardKeyItemModel keyModel = currentLayout.getLastKey();
                        if (keyName.equals("Label")) {
                            keyModel.setLabel(keyValue);
                        }
                        if (keyName.equals("Background")) {
                            keyModel.setBackground(keyValue);
                        }
                    } else {
                        if (line.equals("KeyShift") || line.equals("KeyDelete") || line.equals("KeyAlphaSymbol") || line.equals("KeyEmoji")
                                || line.equals("KeyMark")
                                || line.equals("KeySpace")
                                || line.equals("KeyEnter")) {
                            KeyboardKeyItemModel funcationKeyModel = new KeyboardKeyItemModel(line);
                            config.addKey(funcationKeyModel);
                        } else if (line.contains(":")) {
                            String[] parts = line.split(":");
                            String keyName = parts[0].trim();
                            String keyValue = parts[1].trim();
                            KeyboardKeyItemModel lastKeyModel = config.getLastKeyList();
                            if (keyName.equals("Label")) {
                                lastKeyModel.setLabel(keyValue);
                            }
                            if (keyName.equals("Background")) {
                                lastKeyModel.setBackground(keyValue);
                            }
                        }
                    }
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return config;
    }
}


