/*
===========================================================================
Copyright (C) 2015 the OpenMoHAA team

This file is part of OpenMoHAA source code.

OpenMoHAA source code is free software; you can redistribute it
and/or modify it under the terms of the GNU General Public License as
published by the Free Software Foundation; either version 2 of the License,
or (at your option) any later version.

OpenMoHAA source code is distributed in the hope that it will be
useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with OpenMoHAA source code; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
===========================================================================
*/

#include "ui_local.h"

uidef_t     uid;
uiexport_t  uie;
uiimport_t  uii;
uiGlobals_t ui;

void UIE_AddFileToList(const char *name)
{
    ui.fileList.AddTail(name);
}

void UIE_ResolutionChanged(void)
{
    UIRect2D frame(0, 0, uid.vidWidth, uid.vidHeight);
    uWinMan.setFrame(frame);
    uWinMan.RefreshShadersFromList();
}

void UI_GetMouseState(int *mouseX, int *mouseY, int *flags)
{
    if (mouseX) {
        *mouseX = uid.mouseX;
    }

    if (mouseY) {
        *mouseY = uid.mouseY;
    }

    if (flags) {
        *flags = uid.mouseFlags;
    }
}

int UI_GetCvarInt(const char *name, int def)
{
    cvar_t *cvar = uii.Cvar_Find(name);

    if (!cvar) {
        return def;
    }

    if (cvar->latchedString) {
        return atoi(cvar->latchedString);
    }

    return cvar->integer;
}

float UI_GetCvarFloat(const char *name, float def)
{
    cvar_t *cvar = uii.Cvar_Find(name);

    if (!cvar) {
        return def;
    }

    if (cvar->latchedString) {
        return atof(cvar->latchedString);
    }

    return cvar->value;
}

const char *UI_GetCvarString(const char *cvar, char *def)
{
    return uii.Cvar_GetString(cvar, def);
}

cvar_t *UI_FindCvar(const char *cvar)
{
    return uii.Cvar_Find(cvar);
}

void UI_SetCvarInt(const char *cvar, int value)
{
    char s[16];

    Com_sprintf(s, sizeof(s), "%d", value);
    uii.Cvar_Set(cvar, s);
}

void UI_SetCvarFloat(const char *cvar, float value)
{
    char s[16];

    Com_sprintf(s, sizeof(s), "%f", value);
    uii.Cvar_Set(cvar, s);
}

void UI_ListFiles(const char *filespec)
{
    ui.fileList.RemoveAllItems();
    uii.File_ListFiles(filespec);
}

const char *UI_ConfigString(int index)
{
    return uii.GetConfigstring(index);
}

void UI_Init(void)
{
    UIRect2D frame(0, 0, uid.vidWidth, uid.vidHeight);

    ui.globalFont = new UIFont;
    uWinMan.Init(frame, "verdana-12");

    UColor color(0, 0, 0, 0);
    uWinMan.setBackgroundColor(color, true);
}

void UI_Shutdown(void)
{
    if (ui.globalFont) {
        delete ui.globalFont;
        ui.globalFont = NULL;
    }

    uWinMan.Shutdown();
}

void UI_InitExports()
{
    uie.AddFileToList    = UIE_AddFileToList;
    uie.ResolutionChange = UIE_ResolutionChanged;
    uie.Init             = UI_Init;
    uie.Shutdown         = UI_Shutdown;
    uie.FontStringWidth  = UI_FontStringWidth;

    //
    // OLD implementation
    //
    /*
	uie.KeyEvent			= UI_KeyEvent;
	uie.MouseEvent			= UI_MouseEvent;
	uie.Refresh				= UI_Refresh;
	uie.DrawHUD				= UI_DrawHUD;
	uie.IsFullscreen		= UI_IsFullscreen;
	uie.SetActiveMenu		= UI_SetActiveMenu;
	uie.ConsoleCommand		= UI_ConsoleCommand;
	uie.DrawConnectScreen	= UI_DrawConnectScreen;
	*/
}
