// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "sky/engine/core/events/KeyboardEvent.h"
#include "gen/sky/core/EventNames.h"
#include "gen/sky/core/EventTypeNames.h"

namespace blink {

static AtomicString stringForType(WebInputEvent::Type type)
{
    if (type == WebInputEvent::KeyDown)
        return EventTypeNames::keydown;
    if (type == WebInputEvent::Char)
        return EventTypeNames::keypress;
    if (type == WebInputEvent::KeyUp)
        return EventTypeNames::keyup;
    ASSERT_NOT_REACHED();
    return AtomicString();
}

static String locationFromModifiers(int modifiers)
{
    if (modifiers & WebInputEvent::IsKeyPad)
        return "numpad";
    if (modifiers & WebInputEvent::IsLeft)
        return "left";
    if (modifiers & WebInputEvent::IsRight)
        return "right";
    return "standard";
}

KeyboardEvent::~KeyboardEvent()
{
}

const AtomicString& KeyboardEvent::interfaceName() const
{
    return EventNames::KeyboardEvent;
}

bool KeyboardEvent::isKeyboardEvent() const
{
    return true;
}

KeyboardEvent::KeyboardEvent()
    : KeyboardEvent(AtomicString(), KeyboardEventInit())
{
}

KeyboardEvent::KeyboardEvent(const WebKeyboardEvent& event)
    : Event(stringForType(event.type), true, true)
    , m_key(event.key)
    , m_location(locationFromModifiers(event.modifiers))
    , m_charCode(event.charCode)
    , m_ctrlKey(event.modifiers & WebInputEvent::ControlKey)
    , m_shiftKey(event.modifiers & WebInputEvent::ShiftKey)
    , m_altKey(event.modifiers & WebInputEvent::AltKey)
    , m_metaKey(event.modifiers & WebInputEvent::MetaKey)
    , m_repeat(event.modifiers & WebInputEvent::IsAutoRepeat)
{
    m_timeStamp = event.timeStampMS;

    if (event.type == WebInputEvent::KeyDown || event.type == WebInputEvent::KeyUp) {
        m_charCode = 0;
    } else if (event.type == WebInputEvent::Char) {
        m_key = 0;
        m_location = String();
    }
}

KeyboardEvent::KeyboardEvent(const AtomicString& type, const KeyboardEventInit& initializer)
    : Event(type, initializer)
    , m_key(initializer.key)
    , m_location(initializer.location)
    , m_charCode(initializer.charCode)
    , m_ctrlKey(initializer.ctrlKey)
    , m_shiftKey(initializer.shiftKey)
    , m_altKey(initializer.altKey)
    , m_metaKey(initializer.metaKey)
    , m_repeat(initializer.repeat)
{
}

} // namespace blink
