/* date = June 11th 2023 1:20 pm */

#ifndef VN_WORKSPACE_VIEW_H
#define VN_WORKSPACE_VIEW_H

////////////////////////////////
//~ sixten: Workspace View Types

struct workspace_view
{
	arena *Arena;
	
	workspace_panel *Parent;
	workspace_view *Next;
	workspace_view *Prev;
	
	enum workspace_view_kind Kind;
	void *Data;
};

enum workspace_view_kind
{
	W_ViewKind_None,
	W_ViewKind_Startup,
	W_ViewKind_Settings,
	W_ViewKind_FileLister,
	W_ViewKind_TextEditor,
	W_ViewKind_SceneView,
	W_ViewKind_NavEditor,
	W_ViewKind_ImageViewer,
    W_ViewKind_BytecodeViewer,
    //W_ViewKind_MemoryInspector,
    W_ViewKind_Error,
};

struct workspace_view_error
{
	string Message;
};

enum workspace_settings_category
{
	W_Settings_All,
	W_Settings_General,
	W_Settings_Developer,
};

struct workspace_view_settings
{
	workspace_settings_category Category;
	r32 GlobalScroll;
	
	// sixten: General
	b32 GeneralDropdownOpen;
};

struct workspace_view_image_viewer
{
	string FileName;
	render_handle Texture;
	r32 Scale;
	v2_r32 Offset;
};

struct workspace_view_bytecode_viewer
{
    
};

////////////////////////////////
//~ sixten: Workspace View Functions

//- sixten: Views
inline workspace_view *W_CreateNewView(workspace_view_kind Type, workspace_panel *Parent);
inline void W_DestroyView(workspace_view *View);
inline b32 W_ViewIsCurrent(workspace_view *View);
inline string W_NameFromView(arena *Arena, workspace_view *View);

//- sixten: Builder code
static void W_ViewListerInputCallback(render_group *Group, glyph_atlas *Atlas, ui_box *Box, void *Data);
static void W_BuildViewTypeLister(workspace_view *View);
static void W_BuildView(workspace_view *View);

//- sixten: View Implementations
static b32 W_ImageViewerSetup(workspace_view *View, string Name, string Contents);
static void W_BuildImageViewer(workspace_view *View);
static void W_BuildSceneView(workspace_view *View);
static void W_BuildSettings(workspace_view *View);


#endif //VN_WORKSPACE_VIEW_H
