#include "CFramework.h"

// ImGui::Combo/ImGui::List等で使う文字列群
const char* AimBoneList[] = { "头部", "颈部", "胸部", "脊椎" };
const char* AimKeyModeList[] = { "无按键", "且", "或" };
const char* BoxTypeList[] = { "方框", "角框" };
const char* CrosshairList[] = { "十字", "圆形" };
std::vector<const char*> MenuStringList = { "自喵", "透视", "杂项", "设置" };
std::vector<const char*> MenuIconList = { ICON_FA_CROSSHAIRS, ICON_FA_EYE, ICON_FA_BARS, ICON_FA_GEAR };

// 菜单，配置
int Index = 0;
int BindingID = 0;
int FileNum = 0;
bool DeleteFlag = false;

// 作弊菜单
void CFramework::RenderMenu()
{
    // 设置
    ImGuiStyle& style = ImGui::GetStyle();
    ImVec4* colors = style.Colors;

    //ImGui::SetNextWindowBgAlpha(0.975f);
    ImGui::SetNextWindowSize(ImVec2(725.f, 450.f));
    ImGui::Begin("反恐精英2 [ 外部 ] - 12GAME永久地址发布页：WWW.12GAMDH.COM", nullptr, ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoCollapse);

    //---// 子窗口0 //-----------------------------------//
    ImGui::BeginChild("##SelectChild", ImVec2(150.f, ImGui::GetContentRegionAvail().y), false);

    ImGui::SetCursorPosY(25.f);

    ImGui::PushFont(icon);

    for (int i = 0; i < MenuIconList.size(); i++) {
        if (ImGui::CustomButton(MenuIconList[i], MenuStringList[i], ImVec2(ImGui::GetContentRegionAvail().x, 35.f), Index == i ? true : false))
            Index = i;
    }

    ImGui::PopFont();

    ImGui::EndChild();
    //---// 子窗口0 结束 //-------------------------------//

    ImGui::SameLine();

    //---// 子窗口1 //-----------------------------------//
    ImGui::BeginChild("##MainChild", ImVec2(ImGui::GetContentRegionAvail()), false);

    //---// 左侧 //--------------------------------------//
    ImGui::BeginChild("##LeftChild", ImVec2(ImGui::GetContentRegionAvail().x / 2.f - (style.WindowPadding.x * 2), ImGui::GetContentRegionAvail().y), false);

    ImGui::PushStyleColor(ImGuiCol_ChildBg, ImVec4(0.1f, 0.1f, 0.1f, 1.f));

    switch (Index)
    {
    case 0:
        ImGui::BeginChild("##C000", ImVec2(ImGui::GetContentRegionAvail().x, ImGui::GetContentRegionAvail().y / 3.f), true);
        ImGui::Text("视觉");
        ImGui::Separator();
        ImGui::Spacing();

        ImGui::Checkbox("启用自喵", &g.bAimBotEnable);

        ImGui::EndChild();
        ImGui::BeginChild("##C001", ImVec2(ImGui::GetContentRegionAvail()), true);

        ImGui::Text("自喵设置");
        ImGui::Separator();
        ImGui::Spacing();

        ImGui::CustomSliderInt("自喵范围", "##a_fov", &g.iAimFov, 30, 150);
        ImGui::CustomSliderFloat("自喵平滑", "##a_smt", &g.flAimSmooth, 1.f, 30.f);
        ImGui::CustomSliderInt("自喵最大距离", "##a_dist", &g.iAimMaxDistance, 15, 150);

        ImGui::Spacing();
        ImGui::Spacing();

        ImGui::Combo("自喵位置", &g.iAimTargetBone, AimBoneList, IM_ARRAYSIZE(AimBoneList));

        ImGui::EndChild();
        break;
    case 1: // 视觉
        ImGui::BeginChild("##C010", ImVec2(ImGui::GetContentRegionAvail().x, ImGui::GetContentRegionAvail().y / 3.f), true);
        ImGui::Text("透视");
        ImGui::Separator();
        ImGui::Spacing();

        ImGui::Checkbox("启用透视", &g.bVisualEnable);
        ImGui::Checkbox("2D雷达", &g.bShowRadar);
        ImGui::Checkbox("队友透视", &g.bShowTeam);

        ImGui::EndChild();
        ImGui::BeginChild("##C011", ImVec2(ImGui::GetContentRegionAvail()), true);

        ImGui::Text("透视选项");
        ImGui::Separator();
        ImGui::Spacing();

        ImGui::Checkbox("边框", &g.bBox);
        ImGui::Checkbox("填充边框", &g.bFilled);
        ImGui::Checkbox("线条", &g.bLine);
        ImGui::Checkbox("骨骼", &g.bSkeleton);
        ImGui::Checkbox("血量条", &g.bHealth);
        ImGui::Checkbox("名字", &g.bName);
        ImGui::Checkbox("距离", &g.bDistance);
        ImGui::Checkbox("武器", &g.bWeapon);

        ImGui::EndChild();
        break;
    case 2: { // 杂项
        /*
        ImGui::BeginChild("##C020", ImVec2(ImGui::GetContentRegionAvail().x, ImGui::GetContentRegionAvail().y / 2.5f), true);

        ImGui::Checkbox("连跳", &g.g_bHop);
        ImGui::Checkbox("后坐力控制", &g.g_RCS);

        ImGui::EndChild();
        ImGui::BeginChild("##C021", ImVec2(ImGui::GetContentRegionAvail().x, ImGui::GetContentRegionAvail().y / 2.f), true);

        ImGui::Text("后坐力控制");
        ImGui::Separator();
        ImGui::Spacing();
        ImGui::Checkbox("后坐力控制", &g.g_RCS);
        ImGui::CustomSliderFloat("缩放", "##RCS_Scale", &g.g_RCS_Scale, 0.f, 1.f, "%.2f");

        ImGui::EndChild();
        */
    } break;
    case 3: // 系统
        ImGui::BeginChild("##C030", ImVec2(ImGui::GetContentRegionAvail().x, ImGui::GetContentRegionAvail().y / 1.75f), true);

        ImGui::Text("系统");
        ImGui::Separator();
        ImGui::Spacing();
        ImGui::Checkbox("准星", &g.bCrosshairEnable);

        ImGui::NewLine();

        ImGui::CustomSliderInt("最大帧率", "##MaxFrame", &g.iMaxFramerate, 30, 500);

        ImGui::EndChild();
        ImGui::BeginChild("##C031", ImVec2(ImGui::GetContentRegionAvail()), true);

        ImGui::Text("准星");
        ImGui::Separator();
        ImGui::Spacing();

        ImGui::Checkbox("准星", &g.bCrosshairEnable);
        ImGui::CustomSliderInt("准星大小", "##SizeCH", &g.CrosshairSize, 1, 10);
        ImGui::ColorEdit4("颜色##C", &g.Color_Crosshair.Value.x);
        ImGui::Combo("类型##C", &g.CrosshairType, CrosshairList, IM_ARRAYSIZE(CrosshairList));

        ImGui::EndChild();
        break;
    default:
        break;
    }

    ImGui::PopStyleColor();

    ImGui::EndChild();
    //---------------------------------------------------//

    ImGui::SameLine();

    //---// 右侧 //--------------------------------------//
    ImGui::BeginChild("##RightChild", ImVec2(ImGui::GetContentRegionAvail()), false);

    ImGui::PushStyleColor(ImGuiCol_ChildBg, ImVec4(0.1f, 0.1f, 0.1f, 1.f));

    switch (Index)
    {
    case 0:
        ImGui::BeginChild("##C100", ImVec2(ImGui::GetContentRegionAvail().x, ImGui::GetContentRegionAvail().y / 2.7f), true);

        ImGui::Text("范围设置");
        ImGui::Separator();
        ImGui::Spacing();

        ImGui::Checkbox("绘制自喵范围", &g.bShowFOV);
        ImGui::Checkbox("彩虹自喵范围", &g.bRainbowFOV);
        ImGui::ColorEdit3("颜色", &g.Color_AimFOV.Value.x);
        ImGui::CustomSliderInt("自喵视野", "##a_fov", &g.iAimFov, 30, 300);

        ImGui::EndChild();
        ImGui::BeginChild("##101", ImVec2(ImGui::GetContentRegionAvail()), true);

        ImGui::Text("按键绑定");
        ImGui::Separator();
        ImGui::Spacing();

        ImGui::Combo("按键模式", &g.iAimKeyMode, AimKeyModeList, IM_ARRAYSIZE(AimKeyModeList));

        ImGui::NewLine();

        ImGui::Text("第一按键");
        if (ImGui::Button(BindingID == 1 ? "< 按下任意键 >" : utils::KeyNames[g.dwAimKey0], ImVec2(215.f, 22.5f))) {
            BindingID = 1;
            std::thread([&]() { utils::KeyBinder(g.dwAimKey0, BindingID); }).detach();
        }

        ImGui::Spacing();

        ImGui::Text("第二按键");
        if (ImGui::Button(BindingID == 2 ? "< 按下任意键 >" : utils::KeyNames[g.dwAimKey1], ImVec2(215.f, 22.5f))) {
            BindingID = 2;
            std::thread([&]() { utils::KeyBinder(g.dwAimKey1, BindingID); }).detach();
        }

        // 防止重复
        if (g.dwAimKey0 == g.dwAimKey1)
            g.dwAimKey1 = NULL;

        ImGui::EndChild();
        break;
    case 1: // 视觉
        ImGui::BeginChild("##C110", ImVec2(ImGui::GetContentRegionAvail().x, ImGui::GetContentRegionAvail().y / 2.75f), true);

        ImGui::Text("透视设置");
        ImGui::Separator();
        ImGui::Spacing();

        ImGui::CustomSliderFloat("雷达缩放", "##R_SCALE", &g.flRadarScale, 1.f, 20.f);
        ImGui::CustomSliderInt("距离", "##Distance", &g.flVisualMaxDistance, 10, 100);

        ImGui::Spacing();
        ImGui::Spacing();

        ImGui::Combo("边框类型", &g.iBoxType, BoxTypeList, IM_ARRAYSIZE(BoxTypeList));

        ImGui::EndChild();
        ImGui::BeginChild("##C111", ImVec2(ImGui::GetContentRegionAvail()), true);

        ImGui::Text("透视颜色");
        ImGui::Separator();
        ImGui::Spacing();

        ImGui::ColorEdit3("敌人", &g.Color_ESP_Enemy.Value.x);
        ImGui::ColorEdit3("自喵目标", &g.Color_ESP_AimTarget.Value.x);
        ImGui::ColorEdit3("队友", &g.Color_ESP_Team.Value.x);
        ImGui::ColorEdit3("阴影", &g.Color_ESP_Shadow.Value.x, ImGuiColorEditFlags_DisplayRGB);

        ImGui::NewLine();

        ImGui::SeparatorText("透明度");
        ImGui::CustomSliderFloat("全局", "##GlobalA", &g.m_flGlobalAlpha, 0.3f, 1.0f, "%.2f");
        ImGui::CustomSliderFloat("阴影", "##ShadowA", &g.m_flShadowAlpha, 0.1f, 0.3f, "%.2f");

        ImGui::EndChild();
        break;
    case 2: // 杂项
        ImGui::BeginChild("##120", ImVec2(ImGui::GetContentRegionAvail()), true);



        ImGui::EndChild();
        break;
    case 3: // 系统
    {
        ImGui::BeginChild("##130", ImVec2(ImGui::GetContentRegionAvail().x, ImGui::GetContentRegionAvail().y / 1.25f), true);

        ImGui::Text("配置");
        ImGui::Separator();
        ImGui::Spacing();

        // 创建配置文件列表
        auto vec = config.GetFileList();
        const char** FileList = new const char* [vec.size()];

        for (size_t j = 0; j < vec.size(); j++)
            FileList[j] = vec[j].c_str();

        if (!g.bGenerateFlag)
        {
            if (ImGui::Button("生成配置文件", ImVec2(ImGui::GetContentRegionAvail().x, 20.f)))
            {
                g.bGenerateFlag = true;
                g.newConfigName.clear();
                utils::EnableKeyboardHook();
            }
        }

        if (g.bGenerateFlag)
        {
            ImGui::TextColored(ImColor(1.f, 0.f, 0.f, 1.f), "新配置名称 :");
            ImGui::SameLine();
            ImGui::Text("%s.json", g.newConfigName.c_str());

            if (ImGui::Button("生成", ImVec2(ImGui::GetContentRegionAvail().x / 2.f, 20.f)) || utils::IsKeyDown(VK_RETURN))
            {
                if (g.newConfigName.size() > 1) {
                    std::thread([&]() { config.CreateNewConfig(g.newConfigName); }).join();
                }

                g.bGenerateFlag = false;
                g.newConfigName.clear();
                utils::DisableKeyboardHook();
            }
            ImGui::SameLine();
            if (ImGui::Button("取消", ImVec2(ImGui::GetContentRegionAvail().x, 20.f)))
            {
                g.bGenerateFlag = false;
                g.newConfigName.clear();
                utils::DisableKeyboardHook();
            }
        }

        ImGui::Spacing();
        ImGui::Spacing();

        ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x);
        ImGui::ListBox("##列表", &FileNum, FileList, vec.size());

        if (!g.bGenerateFlag && !DeleteFlag)
        {
            // 按钮
            if (ImGui::Button("保存", ImVec2(ImGui::GetContentRegionAvail().x / 3.f - 4.f, 20.f))) {
                std::thread([&]() { config.SaveSetting(FileList[FileNum]); }).join();
            }
            ImGui::SameLine();
            if (ImGui::Button("加载", ImVec2(ImGui::GetContentRegionAvail().x / 2.f - 4.f, 20.f)) && vec.size() != 0) {
                std::thread([&]() { config.LoadSetting(FileList[FileNum]); }).join();
            }
            ImGui::SameLine();
            if (ImGui::Button("删除", ImVec2(ImGui::GetContentRegionAvail().x, 20.f)) && vec.size() != 0) {
                DeleteFlag = true;
            }
        }

        if (DeleteFlag)
        {
            ImGui::Text("删除此文件？");

            if (ImGui::Button("确定", ImVec2(90.f, 20.f))) {
                std::thread([&]() { config.DeleteConfig(FileList[FileNum]); }).join();
                DeleteFlag = false;
            }

            ImGui::SameLine();

            if (ImGui::Button("取消", ImVec2(90.f, 20.f)))
                DeleteFlag = false;
        }

        delete[] FileList;

        ImGui::EndChild();
        ImGui::BeginChild("##131", ImVec2(ImGui::GetContentRegionAvail()), true);

        ImGui::Text("退出");
        ImGui::Separator();
        ImGui::Spacing();
        if (ImGui::Button("退出", ImVec2(ImGui::GetContentRegionAvail().x, 30.f)))
            g_ApplicationActive = false;

        ImGui::EndChild();
    }   break;
    default:
        break;
    }

    ImGui::PopStyleColor();

    ImGui::EndChild();
    ImGui::EndChild();
    //---------------------------------------------------//

    ImGui::End();
}