/*
4coder_project_commands.h - type header paired with 4coder_project_commands.cpp
*/

// TOP

#if !defined(FCODER_PROJECT_COMMANDS_H)
#define FCODER_PROJECT_COMMANDS_H

enum{
    OpenAllFilesFlag_Recursive = 1,
};

///////////////////////////////

struct Project_File_Pattern{
    Absolutes absolutes;
};

struct Project_File_Pattern_Array{
    Project_File_Pattern *patterns;
    int32_t count;
};

struct Project_File_Load_Path{
    String path;
    bool32 recursive;
    bool32 relative;
};

struct Project_File_Load_Path_Array{
    Project_File_Load_Path *paths;
    int32_t count;
};

struct Project_Command{
    String name;
    String cmd;
    String out;
    bool32 footer_panel;
    bool32 save_dirty_files;
    bool32 cursor_at_end;
};

struct Project_Command_Array{
    Project_Command *commands;
    int32_t count;
};

struct Project{
    bool32 loaded;
    
    String dir;
    String name;
    
    Project_File_Pattern_Array pattern_array;
    Project_File_Pattern_Array blacklist_pattern_array;
    Project_File_Load_Path_Array load_path_array;
    Project_Command_Array command_array;
    
    int32_t fkey_commands[16];
};

typedef int32_t Project_OS_Match_Level;
enum{
    ProjectOSMatchLevel_NoMatch = 0,
    ProjectOSMatchLevel_PassiveMatch = 1,
    ProjectOSMatchLevel_ActiveMatch = 2,
};

struct Project_Parse_Result{
    Config *parsed;
    Project *project;
};

///////////////////////////////

struct Project_Setup_Status{
    bool32 bat_exists;
    bool32 sh_exists;
    bool32 project_exists;
    bool32 everything_exists;
};

struct Project_Key_Strings{
    bool32 success;
    String script_file;
    String code_file;
    String output_dir;
    String binary_file;
};

#endif

// BOTTOM