/****************************************************************************
** qcrono - un reloj digital y cronómetro
**---------------------------------------------------------------------------
** qcrono - main.cpp, qcrono.cpp, qcrono.h, qcrono.qrc, qcrono.ui
**===========================================================================
** FJA - fja@neocipres.com                Abril de 2018   (9/05/2018)
**===========================================================================
** This file may be used under the terms of the GNU General Public
** License version 3.0 as published by the Free Software Foundation
** and appearing in the file LICENSE.GPL included in the packaging of
** this file.  Please review the following information to ensure GNU
** General Public Licensing requirements will be met:
**
**
** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
**
****************************************************************************/

#include "qcrono.h"
#include "ui_qcrono.h"
#include <QMessageBox>
#include <QFile>

qcrono::qcrono(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::qcrono)
{
    ui->setupUi(this);

    setWindowFlags(Qt::Window
                       | Qt::CustomizeWindowHint
                       | Qt::WindowStaysOnTopHint);

    tiempo = new QTimer(this);
    connect(tiempo, SIGNAL(timeout()), this, SLOT(muestraHora()));
    connect(tiempo, SIGNAL(timeout()), this, SLOT(muestraContador()));
    tiempo->start(1000);

    ui->lcdNHora->setStyleSheet("background-color:rgb(224, 196, 177)");
    ui->lcdNCrono->setStyleSheet("background-color:rgb(181, 181, 220)");
    ui->lcdNCuenta->setStyleSheet("background-color:rgb(185, 185, 185)");

    hh = 0;
    mm = 0;
    incmm0 = 0;
    iniciar = false;
    ui->lcdNCrono->display(" ");
    ui->lcdNCuenta->display("0");

    connect(ui->pBQt, SIGNAL(clicked()), qApp, SLOT(aboutQt()));

    muestraHora();
}

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

void qcrono::on_pBAyuda_clicked()
{
    QString separador = QString::null;
    separador.fill( '-', 78 );
    separador = "<p><b>"+separador+"</b></p>";
    QString nomAp = "<p><b><BIG><BIG>qcrono</BIG></BIG></b></p><br>";
    QString desAp1 = "<p><b>Una forma de ser conscientes de como pasa</b></p>";
    QString desAp2 = "<p><b>el tiempo</b></p>";
    QString autor = "<p><b>FJA</b> - fja@neocipres.com </p>";
    QString web = QString::fromUtf8("<p><a href= http://prg.neocipres.com>El Ciprés S.L. --> 0</a></p>");
    QString version = QString::fromUtf8("<p>Versión: 0.9.1</p>");
    QString modificado = "<p>Abril de 2018  -  Modificado el 9 de May/2018</p>";
    QString licencia = QString::fromUtf8("<p>Distribuido de acuerdo a los términos de la <a href= https://www.gnu.org/licenses/licenses.es.html>licencia GNU/GPL</a></p>");
    QString gnu = "<p><a href= http://www.gnu.org/home.es.html>Proyecto GNU</a></p>";
    //QString otro = QString::QString(self.tr("<p><em> </em> </p>"))
    QMessageBox::about(ui->centralWidget, " Acerca de ...", nomAp + desAp1 + desAp2 + separador + autor + web + modificado + separador + version + licencia + gnu);
}

void qcrono::muestraHora()
{
    QTime hora = QTime::currentTime();
    QString text = hora.toString("hh:mm");
    if ((hora.second() % 2) == 0)
            text[2] = ' ';
    ui->lcdNHora->display(text);

}

void qcrono::muestraContador()
{
    if (iniciar){
        QTime hora = QTime::currentTime();
        mm1 = QTime(0, 0, 0).secsTo(hora) / 60;
        incmm1 = mm1 - mm0;
        if (incmm1 != incmm0) {
            ui->lcdNCuenta->display(QString::number(incmm1));
            incmm0 = incmm1;
            // Cuenta atrás ....
            if (mm != 0){
                mm--;
                QString texto = QString::number(hh) + ":" + QString::number(mm);
                ui->lcdNCrono->display(texto);
            }

            if (mm == 0 && hh != 0){
                mm = 59;
                hh--;
                QString texto = QString::number(hh) + ":" + QString::number(mm);
                ui->lcdNCrono->display(texto);
            }

            if (mm == 0 && hh == 0){
                activarAlarma();
                activarBotones();
                ui->statusBar->showMessage(QString::fromUtf8("> Cuenta atrás finalizada "), 5000);
            }

        }
    }

}

void qcrono::on_dialHora_valueChanged(int value)
{
    hh = value;
    QString texto = QString::number(hh) + ":" + QString::number(mm);
    ui->lcdNCrono->display(texto);
}

void qcrono::on_dialMinuto_valueChanged(int value)
{
    mm = value;
    QString texto = QString::number(hh) + ":" + QString::number(mm);
    ui->lcdNCrono->display(texto);
}

void qcrono::on_pBIniciar_clicked()
{
    iniciar = true;
    QTime hora = QTime::currentTime();
    mm0 = QTime(0, 0, 0).secsTo(hora) / 60;
    ui->dialHora->setEnabled(false);
    ui->dialMinuto->setEnabled(false);
    ui->pBIniciar->setEnabled(false);
    ui->statusBar->showMessage("> Contador en marcha ...", 5000);
}

void qcrono::on_pBParar_clicked()
{
    activarBotones();
    ui->statusBar->showMessage("> Contador detenido ...", 5000);
}

void qcrono::activarBotones()
{
    iniciar = false;
    incmm0 = 0;
    ui->lcdNCuenta->display("0");
    ui->dialHora->setEnabled(true);
    ui->dialMinuto->setEnabled(true);
    ui->pBIniciar->setEnabled(true);
}

void qcrono::activarAlarma()
{
    QString nomF;
    nomF = "rec/alarma.wav";
    QFile fichero(nomF);
    if (!fichero.exists()){
        QString aviso = tr("No existe el archivo:\n\n %1\n\n%2").arg(nomF).arg(fichero.errorString());
        QMessageBox::critical(ui->centralWidget, "Error al abrir", aviso);
    }
    else {
        sonido = new QSound(nomF);
        sonido->setLoops(3); // ???
        sonido->play(nomF);

    }
}