/*
    This file is part of the testing framework for libkcal.

    Copyright (c) 2005 Adriaan de Groot <groot@kde.org>

    This library is free software; you can redistribute it and/or
    modify it under the terms of the GNU Library General Public
    License as published by the Free Software Foundation; either
    version 2 of the License, or (at your option) any later version.

    This library 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
    Library General Public License for more details.

    You should have received a copy of the GNU Library General Public License
    along with this library; see the file COPYING.LIB.  If not, write to
    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
    Boston, MA 02110-1301, USA.
*/

#include <tdeaboutdata.h>
#include <tdeapplication.h>
#include <kdebug.h>
#include <tdelocale.h>
#include <tdecmdlineargs.h>

#include "calendarlocal.h"

#include <tqfile.h>

using namespace KCal;

static const TDECmdLineOptions options[] =
{
  {"verbose", "Verbose output", 0},
  TDECmdLineLastOption
};

int main(int argc,char **argv)
{
  TDEAboutData aboutData("testfields","Test calendar fields read/write","0.1");
  TDECmdLineArgs::init(argc,argv,&aboutData);
  TDECmdLineArgs::addCmdLineOptions( options );

//  TDEApplication app( false, false );
  TDEApplication app;

  TDECmdLineArgs *args = TDECmdLineArgs::parsedArgs();

  Q_UNUSED(args)

  CalendarLocal cal( TQString::fromLatin1("UTC") );

  TQString file = TQString::fromLatin1( INPUT );
  if (!cal.load( file ) ) {
    kdError() << "Can't load " << file << endl;
    return 1;
  }

  // 2 tests... first uid should result in a syncStatus of 0.  second uid
  // should have a new summary and a 1 for syncStatus.
  TQString uid1 = TQString::fromLatin1("KOrganizer-1345486115.965");
  TQString uid2 = TQString::fromLatin1("KOrganizer-1345486115.967");

  Event *e = cal.event( uid1 );
  if (!e) {
    kdError() << "No event " << uid1 << endl;
    return 1;
  }

  kdDebug() << "Event description " << e->summary() << endl;

  if (e->hasEndDate()) {
    TQDateTime d = e->dtEnd();
    kdDebug() << "Event ends " << d << endl;
  }

  if (e->pilotId()) {
    kdDebug() << "Pilot ID = " << e->pilotId() << endl;
    kdDebug() << "Pilot Sync Status = " << e->syncStatus() << endl;
  } else {
    kdError() << "No Pilot ID" << endl;
    return 1;
  }

  kdDebug() << "First test passed.  Able to read fields." << endl;

  e->setSyncStatus(KCal::Incidence::SYNCNONE);

  TQString newSummary = TQString::fromLatin1("Mooo summary");

  Event *f = new Event(*e);


  f->setUid(uid2);
  // add event so we trigger updated()
  cal.addEvent(f);

  f->setPilotId(34567);
  f->setSummary(newSummary);



  TQString filew = file +".out";
  // weird, yes, I know, but we have a bug right now with saving the file
  // twice which is corrupting X-PILOTSTAT
  if ( !cal.save( filew ) || !cal.save( filew ) ) {
    kdError() << "Can't save " << filew << endl;
    return 1;
  }


  // now try to read the file back in and see if our changes made it
  CalendarLocal cal2( TQString::fromLatin1("UTC") );
  if (!cal2.load( filew ) ) {
    kdError() << "Can't load " << filew << endl;
    return 1;
  }

  TQFile::remove( filew );

  // check for uid1--should have syncStatus of 0
  e = cal2.event( uid1 );
  if (!e) {
    kdError() << "No event for first read test" << uid1 << endl;
    return 1;
  }

  kdDebug() << "Event 1 description " << e->summary() << endl;

  if (e->pilotId()) {
    kdDebug() << "First Pilot ID = " << e->pilotId() << endl;
    kdDebug() << "First Pilot Sync Status = " << e->syncStatus() << endl;
  } else {
    kdError() << "No Pilot ID for first test" << endl;
    return 1;
  }

  if (e->syncStatus() != KCal::Incidence::SYNCNONE) {
    kdError() << "Wrong Pilot sync status." << endl;
    return 1;
  }

  // now check our second event for correctness
  f = cal2.event( uid2 );

  kdDebug() << "Event 2 description " << f->summary() << endl;

  if (f->summary() != newSummary) {
    kdError() << "Wrong summary for second read test." << endl;
    return 1;
  }

  if (f->pilotId()) {
    kdDebug() << "Second Pilot ID = " << f->pilotId() << endl;
    kdDebug() << "Second Pilot Sync Status = " << f->syncStatus() << endl;
  } else {
    kdError() << "No Pilot ID for second read test" << endl;
    return 1;
  }

  if (f->syncStatus() != KCal::Incidence::SYNCMOD) {
    kdError() << "Wrong Pilot sync status for second read test." << endl;
    return 1;
  }

  return 0;
}