#include <QDebug>
#include <QMultiMap>

#include <iostream>
using namespace std;

#include "shortcuts.h"

/////////////////////////////////////////////////////////////////
// KeySwitch
/////////////////////////////////////////////////////////////////
KeySwitch::KeySwitch (
        const QString &kIdentifier,
        const QString &kName,
        const QString &kGroup,
        const QString &kTag,
        const QKeySequence &kseq)
{
    identifier = kIdentifier;
    name = kName;
    group = kGroup;
    tag = kTag;
    keySequence = kseq;
}

/////////////////////////////////////////////////////////////////
// Switchboard
/////////////////////////////////////////////////////////////////
Switchboard::Switchboard ()
{
}

void Switchboard::addGroup( QString gIdentifier, QString gName)
{
    if (groups.contains(gIdentifier))
    {
        qDebug() << "Warning switchboard: Shortcut group " << gIdentifier << " already exists";
        return;
    }
    groups.insert(gIdentifier, gName); 
}

void Switchboard::addSwitch( QString identifier, QString scope, QAction *action, QString tag)
{
    if (!switches.contains(identifier))
    {
        KeySwitch ksw(identifier, action->text(), scope, tag, action->shortcut());
        switches.insert(scope, ksw);
    } else
        qDebug() << "Warning switchboard::addSwitch warning: Existing idenifier " << identifier;
}

QString Switchboard::getASCII()  
{
    QString s;
    QString g;
    foreach (g, switches.uniqueKeys())
    {
        s += "Scope " + g +":\n";
        QList <KeySwitch> values=switches.values(g);
        for (int i=0; i<values.size(); ++i)
        {
            QString desc=values.at(i).name;
            QString   sc=values.at(i).keySequence.toString();
            desc=desc.remove('&');
            desc=desc.remove("...");
            s += QString(" %1: %2\n").arg(sc,12).arg(desc);
        }
        s += "\n";
    }

    /*
    foreach (g, actions.uniqueKeys())
    {
        s += g +"\n";
        QList <QAction*> values=actions.values(g);
        for (int i=0;i<values.size();++i)
        {
            QString desc=values.at(i)->text();
            QString   sc=values.at(i)->shortcut().toString();
            desc=desc.remove('&');
            desc=desc.remove("...");
            s+= QString(" %1: %2\n").arg(sc,12).arg(desc);
        }
    }
    */
    return s;
}

void Switchboard::printASCII ()	
{
    cout <<qPrintable(getASCII() );
}

void Switchboard::printLaTeX ()	
{
    QString g;
    foreach (g,actions.uniqueKeys())
    {
        cout <<"Group: "<<qPrintable(g)<<"\\\\ \\hline"<<endl;
        QList <QAction*> values=actions.values(g);
        for (int i=0;i<values.size();++i)
            if (!values.at(i)->shortcut().toString().isEmpty())
            {
                QString desc=values.at(i)->text();
                QString   sc=values.at(i)->shortcut().toString();
                desc=desc.remove('&');
                desc=desc.remove("...");
                cout << qPrintable( QString(" %1& %2").arg(sc,12).arg(desc) )<<endl;
            }
        cout <<endl;
    }
}
