package com.rainbow.app.keyboard.utils;

import com.rainbow.app.keyboard.helper.KeybModel;
import com.rainbow.app.keyboard.helper.ResConfig;
import com.rainbow.app.keyboard.helper.ResLayout;

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

public class UtilsconfigFile {

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

    public static ResConfig parseConfig(String filePath)   {
//        InputStream open = App.appInstance.getAssets().open(filePath);
        ResConfig config = new ResConfig();
        try (BufferedReader br = new BufferedReader(new FileReader(filePath))) {
            String line;
            ResLayout 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 ResLayout(line.split(":")[0].trim());
                    config.addLayout(currentLayout);
                } else if (currentLayout != null) {
                    if (line.equals("Key")) {
                        String[] parts = line.split(":");
                        String keyName = parts[0].trim();
                        KeybModel KeybModel = new KeybModel(keyName);
                        currentLayout.addKey(KeybModel);
                    } else if (line.contains(":") && currentLayout.getLastKey().getBackground() == null) {
                        // 解析按键的其他属性（如 Label）
                        String[] parts = line.split(":");
                        String keyName = parts[0].trim();
                        String keyValue = parts[1].trim();
                        KeybModel KeybModel = currentLayout.getLastKey();
                        if (keyName.equals("Label")) {
                            KeybModel.setLabel(keyValue);
                        }
                        if (keyName.equals("Background")) {
                            KeybModel.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")) {
                            KeybModel funcationKeybModel = new KeybModel(line);
                            config.addKey(funcationKeybModel);
                        } else if (line.contains(":")) {
                            String[] parts = line.split(":");
                            String keyName = parts[0].trim();
                            String keyValue = parts[1].trim();
                            KeybModel lastKeybModel = config.getLastKeyList();
                            if (keyName.equals("Label")) {
                                lastKeybModel.setLabel(keyValue);
                            }
                            if (keyName.equals("Background")) {
                                lastKeybModel.setBackground(keyValue);
                            }
                        }
                    }
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return config;
    }
}


