#pragma once
#include "../basic/basic.h"

struct FileIter {
    bool   is_valid;
    bool   is_directory;
    String absolute_path;
    String relative_path;
    String filename;

    String    path;
    Allocator allocator;
    Arena    *arena;
    TempArena temp;
    union {
        struct Win32_FileIter *w32;
        void                  *dir;
    };
};

String   ReadFile(Allocator arena, String path);
bool     WriteFile(String path, String data);
String   GetAbsolutePath(Allocator arena, String relative);
bool     IsValid(const FileIter &it);
void     Advance(FileIter *it);
FileIter IterateFiles(Allocator allocator, String path);
bool     InitOS();

String GetExePath(Allocator allocator);
String GetExeDir(Allocator allocator);

struct Process {
    bool   is_valid;
    String error_message;
    char   platform[32];
};

Process RunEx(String cmd);
int     Wait(Process *process);