//
//  OpenGLContext.cpp
//  AppLauncher
//
//  Created by John Ryland on 1/10/17.
//  Copyright © 2017 John Ryland. All rights reserved.
//

#include "OpenGLContext.h"
#include <cstdio>
#include <cstring>
#include <chrono>


OpenGLContext::OpenGLContext()
  : m_currentDemo(new DemoContext)
{
}


OpenGLContext::~OpenGLContext()
{
  delete m_currentDemo;
}


void OpenGLContext::setDemo(const char* a_demoStr)
{
  const DemoContextFactoryItem* item = DemoContextFactoryItem::getFactoryHead();
  while (item)
  {
    if (strcmp(a_demoStr, item->m_name) == 0)
    {
      delete m_currentDemo;
      m_currentDemo = item->m_value();
      break;
    }
    item = item->m_next;
  }

  if (m_currentDemo == nullptr)
  {
    m_currentDemo = new DemoContext;
  }
  
  m_currentDemo->prepare();
}


void OpenGLContext::prepare()
{
  m_currentDemo->prepare();
}


void OpenGLContext::update()
{
  //std::chrono::milliseconds elapsedTime;
  //std::chrono::duration<> elapsedTime;
  m_currentDemo->update();
}


void OpenGLContext::draw()
{
  m_currentDemo->draw();
}


void OpenGLContext::onClose()
{
  m_currentDemo->onClose();
}


void OpenGLContext::onResize(const vec2f& a_size)
{
  m_currentDemo->onResize(a_size);
}


void OpenGLContext::onMouseUp(const MouseEvent& a_event)
{
  m_currentDemo->onMouseUp(a_event);
}


void OpenGLContext::onMouseDown(const MouseEvent& a_event)
{
  m_currentDemo->onMouseDown(a_event);
}


void OpenGLContext::onMouseMove(const MouseEvent& a_event)
{
  m_currentDemo->onMouseMove(a_event);
}
