//
// This file is part of the Marble Virtual Globe.
//
// This program is free software licensed under the GNU LGPL. You can
// find a copy of this license in LICENSE.txt in the top directory of
// the source code.
//
// Copyright 2013      Mohammed Nafees <nafees.technocool@gmail.com>
//


#include <QtCore/QFile>
#include <QtCore/QDebug>
#include <QtGui/QApplication>
#include <QStringList>

#include <cmath>

int main(int argc, char *argv[])
{
    QCoreApplication app(argc, argv);

    QFile file( "dso.kml" );
    file.open( QIODevice::WriteOnly );
    QTextStream out( &file );

    out << "<?xml version=\"1.0\" encoding=\"UTF-8\"?> \n"
        << "<kml xmlns=\"http://earth.google.com/kml/2.2\" hint=\"target=sky\"> \n"
        << "<Document> \n"
        << "    <Style id=\"iconStyle\"> \n"
        << "        <IconStyle> \n"
        << "            <Icon> \n"
        << "                <href>deepsky.png</href> \n"
        << "            </Icon> \n"
        << "        </IconStyle> \n"
        << "    </Style> \n";

    QFile dsoData( "dso.dat" );

    if ( dsoData.open( QFile::ReadOnly ) ) {

        QTextStream in( &dsoData );

        QString line;
        qreal longitude;
        qreal latitude;

        while ( !in.atEnd() ) {
            line = in.readLine();

            // Check for null line at end of file
            if ( line.isNull() ) {
                continue;
            }

            // Ignore Comment lines in header and
            // between dso entries
            if ( line.startsWith( '#' ) )    {
                continue;
            }

            QStringList entries = line.split( QLatin1Char( ',' ) );

            QString id = entries.at( 0 );
            QString longName = entries.at(7);

            double raH = entries.at( 1 ).toDouble();
            double raM = entries.at( 2 ).toDouble();
            double raS = entries.at( 3 ).toDouble();
            double decH = entries.at( 4 ).toDouble();
            double decM = entries.at( 5 ).toDouble();
            double decS = entries.at( 6 ).toDouble();

            double ra = ( raH + raM / 60.0 + raS / 3600.0 ) * 15.0;
            double dec;

            if ( decH >= 0.0 ) {
                dec = decH + decM /60.0 + decS / 3600.0;
            }
            else {
                dec = decH - decM / 60.0 - decS / 3600.0;
            }

            longitude = ra - 180.0;
            latitude = dec;

            out << "    <Placemark> \n"
                << "        <name>" << id << "</name> \n"
                << "        <description>" << longName << "</description> \n"
                << "        <styleUrl>#iconStyle</styleUrl> \n"
                << "        <Point> \n"
                << "            <coordinates>" << longitude << "," << latitude << "</coordinates> \n"
                << "        </Point> \n"
                << "    </Placemark> \n";
        }
    }

    out << "</Document> \n"
        << "</kml> \n";

    dsoData.close();
    file.close();

    app.exit();
}


