#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    soc = new QTcpSocket(this);
    ui->listWidgetState->setAutoScroll(true);
    connect(soc, SIGNAL(connected()), this, SLOT(onQTcpSocket_Connected()));
    connect(soc, SIGNAL(disconnected()), this, SLOT(onQTcpSocket_Disconnected()));
    connect(soc, SIGNAL(readChannelFinished()), this, SLOT(onQTcpSocket_read()));
    connect(soc, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(onQTcpSocket_error(QAbstractSocket::SocketError)));
    connect(soc, SIGNAL(stateChanged(QAbstractSocket::SocketState)), this, SLOT(onQTcpSocket_stateChanged(QAbstractSocket::SocketState)));
    connect(ui->listWidgetState->model(), SIGNAL(rowsInserted(QModelIndex,int,int)), ui->listWidgetState, SLOT(scrollToBottom()));
}

void MainWindow::onQTcpSocket_Connected()
{
    qDebug("Connecté");
    ui->pushButtonConnection->setText("Déconnexion");
}

void MainWindow::onQTcpSocket_Disconnected()
{
    qDebug("Deconnecté");
    ui->pushButtonConnection->setText("Connexion");
}

void MainWindow::onQTcpSocket_read()
{
    qDebug("Message : %c", data);
    ui->listWidgetState->addItem("Message : " + QString(data));
}

void MainWindow::onQTcpSocket_stateChanged(QAbstractSocket::SocketState etat)
{
    switch(etat)
    {
    case 0:
        ui->listWidgetState->addItem("Déconnecté");
        break;

    case 1:
        ui->listWidgetState->addItem("Résolution de l'adresse");
        break;

    case 2:
        ui->listWidgetState->addItem("Connexion...");
        break;

    case 3:
        ui->listWidgetState->addItem("Connecté");
        break;

    case 4:
        ui->listWidgetState->addItem("Déjà connecté");
        break;

    case 6:
        ui->listWidgetState->addItem("Déconnexion...");
        break;

    case 5:
        ui->listWidgetState->addItem("Ecoute...");
        break;

    default:
        ui->listWidgetState->addItem("Error 404 : Error not found");
        break;
    }
}

void MainWindow::onQTcpSocket_error(QAbstractSocket::SocketError error)
{
    qDebug("Erreur : %d", QString::number(error));

    switch (error) {

    case 0:
        ui->listWidgetState->addItem("Erreur : Connexion refusée");
        break;

    case 1:
        ui->listWidgetState->addItem("Erreur : Connexion terminée par le serveur");
        break;

    case 2:
        ui->listWidgetState->addItem("Erreur : Adresse inconnue");
        break;

    case 3:
        ui->listWidgetState->addItem("Erreur : Aucune permission");
        break;

    case 4:
        ui->listWidgetState->addItem("Erreur : Manque de ressource");
        break;

    case 5:
        ui->listWidgetState->addItem("Erreur : Temps écoulé");
        break;

    case 6:
        ui->listWidgetState->addItem("Erreur : Datagramme trop grand");
        break;

    case 7:
        ui->listWidgetState->addItem("Erreur : Erreur réseau");
        break;

    case 8:
        ui->listWidgetState->addItem("Erreur : Adresse déjà utilisée");
        break;

    case 9:
        ui->listWidgetState->addItem("Erreur : Adresse spécifiée non conforme au serveur");
        break;

    case 10:
        ui->listWidgetState->addItem("Erreur : Opération non supportée");
        break;

    case 11:
        ui->listWidgetState->addItem("Erreur : Flux de communication non terminée");
        break;

    case 12:
        ui->listWidgetState->addItem("Erreur : Erreur d'authentification avec le proxy");
        break;

    case 13:
        ui->listWidgetState->addItem("Erreur : Erreur SSL/TLS");
        break;

    case 14:
        ui->listWidgetState->addItem("Erreur : Connexion refusée par le proxy");
        break;

    case 15:
        ui->listWidgetState->addItem("Erreur : Connexion avec le proxy terminée");
        break;

    case 16:
        ui->listWidgetState->addItem("Erreur : Le proxy a cessé de répondre");
        break;

    case 17:
        ui->listWidgetState->addItem("Erreur : Proxy non reconnu");
        break;

    case 18:
        ui->listWidgetState->addItem("Erreur : Réponse proxy invalide");
        break;

    case 19:
        ui->listWidgetState->addItem("Erreur : Opération non permise au moment de l'exécution");
        break;

    case 20:
        ui->listWidgetState->addItem("Erreur : Erreur de la librairie SSL");
        break;

    case 21:
        ui->listWidgetState->addItem("Erreur : Informations SSL invalides");
        break;

    case 22:
        ui->listWidgetState->addItem("Erreur : Erreur temporaire");
        break;

    default:
        ui->listWidgetState->addItem("Erreur : Erreur inconnue");
        break;
    }
}

void MainWindow::on_pushButtonConnection_clicked()
{
    ui->pushButtonConnection->setText("Connexion...");
    soc->abort();
    soc->connectToHost("127.0.0.1", 8454);
}

void MainWindow::on_pushButtonSend_clicked()
{
    if(ui->lineEditMessage->text() != "")
    {
        soc->write(ui->lineEditMessage->text().toLatin1());
        ui->lineEditMessage->clear();
    }
}

MainWindow::~MainWindow()
{
    delete ui;
}
