////////////////////////////////
//~ sixten: Workspace Character Editor Functions

static character_editor_entry_data *W_AllocateCharacterEntryData(workspace_view_character_editor *Editor, memory_arena *Arena)
{
    character_editor_entry_data *Result = Editor->FreeList.First;
    if(!Result)
    {
        Result = PushStructNoClear(Arena, character_editor_entry_data);
    }
    *Result = {};
    return(Result);
}

static void W_BuildCharacterEditorView(workspace_view *View)
{
    workspace_view_character_editor *Editor = (workspace_view_character_editor *)View->Data;
    
    //- sixten: check that the entry list is filled out
    if(DLLIsEmpty(Editor->List.First))
    {
        character_list Characters = CR_GetCharacters();
        for(character_entry *Character = Characters.First; Character != 0; Character = Character->Next)
        {
            character_editor_entry_data *Data = W_AllocateCharacterEntryData(Editor, View->Arena);
            Data->Entry = Character;
            
            DLLInsertLast(Editor->List.First, Editor->List.Last, Data);
        }
    }
    
    UI_WidthFill UI_HeightFill UI_Row() UI_Padding(UI_Em(5, 1)) UI_Column()
    {
        UI_Spacer(UI_Em(2, 1));
        
        // sixten: build character lister
        {
            UI_SetNextWidth(UI_Percent(1, 1));
            UI_SetNextHeight(UI_Percent(1, 0));
            
            UI_Scroll(0, &Editor->ScrollT)
            {
                UI_Height(UI_Em(2.0f, 1)) UI_CornerRadius(4.0f)
                    for(character_editor_entry_data *Data = Editor->List.First; Data != 0; Data = Data->Next)
                {
                    character_entry *Entry = Data->Entry;
                    if(UI_ButtonF("%S", Entry->Name).Clicked)
                    {
                        Data->IsOpen = !Data->IsOpen;
                    }
                    
                    AC_AnimateValueDirect(Data->IsOpen, 0.3f, &Data->OpenTransition);
                    
                    if(Data->OpenTransition > 0.1f)
                    {
                        UI_SetNextHeight(UI_ChildrenSum(Data->OpenTransition, 1));
                        UI_Parent(UI_MakeBox(UI_BoxFlag_DrawBorder     |
                                             UI_BoxFlag_DrawDropShadow |
                                             UI_BoxFlag_Clip,
                                             StrLit("")))
                        {
                            UI_LabelF("hello");
                            UI_LabelF("line");
                            UI_LabelF("paint");
                            UI_LabelF("color");
                            UI_LabelF("design");
                            UI_LabelF("address");
                            UI_LabelF("brightness");
                        }
                    }
                }
            }
        }
        
        // sixten: build bottom controls
        UI_Spacer(UI_Em(1.5, 1));
        UI_Height(UI_Em(2, 1)) UI_Row()
        {
            UI_Width(UI_TextContent(15, 1)) UI_CornerRadius(4)
            {
                UI_SetNextFont(Font_Icons);
                ui_signal AddSignal = UI_ButtonF("%U", FontIcon_UserPlus);
                if(AddSignal.Hovering)
                {
                    UI_TooltipLabel(StrLit("Add new character"), UI_MouseP());
                }
                
                UI_Spacer(UI_Em(0.5, 1));
                
                UI_SetNextFont(Font_Icons);
                ui_signal RemoveSignal = UI_ButtonF("%U", FontIcon_UserTimes);
                if(RemoveSignal.Hovering)
                {
                    UI_TooltipLabel(StrLit("Delete selected character"), UI_MouseP());
                }
            }
        }
        UI_Spacer(UI_Em(1.5, 1));
    }
}