/***************************************************************************
 *   Copyright (C) 2007 by Ian Reinhart Geiser                             *
 *   geiseri@yahoo.com                                                     *
 *                                                                         *
 *   This program is free software; you can redistribute it and/or modify  *
 *   it under the terms of the GNU General Public License as published by  *
 *   the Free Software Foundation; either version 2 of the License, or     *
 *   (at your option) any later version.                                   *
 *                                                                         *
 *   This program is distributed in the hope that it will be useful,       *
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
 *   GNU General Public License for more details.                          *
 *                                                                         *
 *   You should have received a copy of the GNU General Public License     *
 *   along with this program; if not, write to the                         *
 *   Free Software Foundation, Inc.,                                       *
 *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
 ***************************************************************************/

 #include <QCoreApplication>
 #include <QFile>
 #include <QTextStream>
 #include <QMap>
 #include <QFileInfo>

 #include "jsonquery.h"

QTextStream standardError( stderr, QIODevice::WriteOnly );
QTextStream standardOut( stdout, QIODevice::WriteOnly );

void commandUsage()
{
	standardError << "Usage:\n";
	standardError << "\tjsonquery count path filename[,filename2,filename3]\n";
	standardError << "\tjsonquery exists path filename[,filename2,filename3]\n";
	standardError << "\tjsonquery get path filename[,filename2,filename3] [default value]\n";
	standardError << "\tjsonquery keys path filename[,filename2,filename3]\n";
}

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

	if( argc < 3 )
	{
		commandUsage();
		return 1;
	}

	QMap<QString,QString> projectPropertyMap;
	QStringList buffers;
	QString path = argv[2];
	QString filenames( argv[3] );
	
	foreach( QString filename, filenames.split(',') )
	{
	  QFile inputFile( filename);
	  if( inputFile.open(  QIODevice::ReadOnly ) )
	  {
		  QTextStream ts( &inputFile );
		  buffers << QString( ts.readAll() );
		  projectPropertyMap["FILE_PATH"] = QFileInfo(inputFile).absolutePath();
	  }
	  else
	  {
		standardError << "Cannot open " << filename << "\n";
		return 1;
	  }
	}
	
	if( buffers.size() == 0 )
	{
		commandUsage();
		return 1;
	}
	
	if( argv[1] == QLatin1String("get") )
	{
		QString value = JSONQuery::queryValue( path, buffers, projectPropertyMap );
		if( value.isEmpty() )
		{
		    if( argc > 4 )
			standardOut << argv[argc - 1];
		}
		else
		    standardOut << value;
	}
	else if ( argv[1] == QLatin1String("count") )
	{
		standardOut << JSONQuery::countListItems( path, buffers );
	}
	else if ( argv[1] == QLatin1String("exists") )
	{
		return  !JSONQuery::keyExists( path, buffers );
	}
	else if ( argv[1] == QLatin1String("keys") )
	{
		standardOut << JSONQuery::queryKeys( path, buffers ).join(" ");
	}
	else
		commandUsage();

	return 0;
 }
