/***************************************************************************
                          konlinebankingsetupwizard.h
                             -------------------
    begin                : Sat Jan 7 2006
    copyright            : (C) 2006 by Ace Jones
    email                : acejones@users.sourceforge.net
 ***************************************************************************/

/***************************************************************************
 *                                                                         *
 *   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.                                   *
 *                                                                         *
 ***************************************************************************/

#ifndef KONLINEBANKINGSETUPWIZARD_H
#define KONLINEBANKINGSETUPWIZARD_H

// ----------------------------------------------------------------------------
// Library Includes

#include <libofx/libofx.h>

// ----------------------------------------------------------------------------
// QT Includes

#include <tqwidget.h>
#include <tqvaluelist.h>
#include <tqlistview.h>

// ----------------------------------------------------------------------------
// KDE Includes

// ----------------------------------------------------------------------------
// Project Includes

#include "konlinebankingsetupdecl.h"
#include <kmymoney/mymoneykeyvaluecontainer.h>
class OfxAppVersion;
class OfxHeaderVersion;

/**
  * @author Ace Jones
  */

/**
  * This class implementes a wizard for setting up an existing account
  * with online banking.
  *
  * The user is asked to choose his bank from the supported bank, and
  * his account.
  *
  * Currently works only with OFX Direct Connect, but I imagined that
  * other protocols could be included here.  To accomodate this, we'd
  * add another page at the start of the wizard to ask which protocol
  * they wanted.
  *
  */
class KOnlineBankingSetupWizard : public KOnlineBankingSetupDecl
{
  Q_OBJECT
  
public:
  class ListViewItem: public MyMoneyKeyValueContainer, public TQListViewItem
  {
  public:
    ListViewItem( TQListView* parent, const MyMoneyKeyValueContainer& kvps );
    virtual void x(void);
  };

  KOnlineBankingSetupWizard(TQWidget *parent=0, const char *name=0);
  ~KOnlineBankingSetupWizard();

  bool chosenSettings( MyMoneyKeyValueContainer& settings );

  bool isInit(void) const { return m_fInit; }

public slots:
  void next();

protected:
  bool finishAccountPage(void);
  bool finishLoginPage(void);
  bool finishFiPage(void);
  bool post(const char* request, const char* url,const char* filename);

  static int ofxAccountCallback(struct OfxAccountData data, void * pv);
  static int ofxStatusCallback(struct OfxStatusData data, void * pv);

private:
  /// \internal d-pointer class.
  class Private;
  /// \internal d-pointer instance.
  Private* const d;

  TQValueList<OfxFiServiceInfo> m_bankInfo;
  TQValueList<OfxFiServiceInfo>::const_iterator m_it_info;
  bool m_fDone;
  bool m_fInit;
  OfxAppVersion* m_appId;
  OfxHeaderVersion* m_headerVersion;
};

#endif
