/*=========================================================================
| KCalDAV
|--------------------------------------------------------------------------
| (c) 2010  Timothy Pearson
| (c) 2009  Kumaran Santhanam (initial KDE4 version)
|
| This project is released under the GNU General Public License.
| Please see the file COPYING for more details.
|--------------------------------------------------------------------------
| Configuration and properties dialog
 ========================================================================*/

/*=========================================================================
| INCLUDES
 ========================================================================*/

#include "resource.h"
#include "config.h"
#include "configwidgets.h"

#include <kcombobox.h>
#include <kdebug.h>
#include <kdialog.h>
#include <tdelocale.h>
#include <klineedit.h>
#include <tdelistview.h>
#include <kurlrequester.h>

#include <tqlabel.h>
#include <tqlayout.h>
#include <tqcheckbox.h>

/*=========================================================================
| NAMESPACE
 ========================================================================*/

using namespace KCal;

/*=========================================================================
| CONSTANTS
 ========================================================================*/

/*=========================================================================
| STATIC METHODS
 ========================================================================*/

ResourceCalDav* ResourceCalDavConfig::getCalDavResource(KRES::Resource* resource) {
    ResourceCalDav *res = dynamic_cast<ResourceCalDav *>( resource );
    if (!res) {
        kdDebug() << "invalid resource type" << '\n';
    }

    return res;
}

CalDavPrefs* ResourceCalDavConfig::getPrefs(ResourceCalDav* res) {
    CalDavPrefs* p = NULL;

    if (res) {
        p = res->prefs();
        if (!p) {
            kdDebug() << "CalDAV: res->prefs() returned NULL" << '\n';
        }
    }

    return p;
}

/*=========================================================================
| CONSTRUCTOR / DESTRUCTOR
 ========================================================================*/

ResourceCalDavConfig::ResourceCalDavConfig( TQWidget *parent )
    : KRES::ConfigWidget( parent )
{
    setupUI();
}

/*=========================================================================
| METHODS
 ========================================================================*/

void ResourceCalDavConfig::loadSettings( KRES::Resource *resource ) {
    ResourceCalDav* res = getCalDavResource(resource);
    CalDavPrefs* p = getPrefs(res);
    if (NULL != p) {
        mUrl->setText(p->url());
        mUsername->setText(p->username());
        mRememberPassword->setChecked(p->rememberPassword());
        mPassword->setText(p->password());
        mTasksUrl->setText(p->tasksUrl());
        mJournalsUrl->setText(p->journalsUrl());
        mUseSTasks->setChecked(p->useSTasks());
        mUseSJournals->setChecked(p->useSJournals());

        mReloadConfig->loadSettings(res);
        mSaveConfig->loadSettings(res);
    }
}

void ResourceCalDavConfig::saveSettings( KRES::Resource *resource ) {
    ResourceCalDav* res = getCalDavResource(resource);
    if (NULL != res) {
        mReloadConfig->saveSettings(res);
        mSaveConfig->saveSettings(res);

        CalDavPrefs* p = getPrefs(res);
        if (NULL != p) {
            p->setUrl(mUrl->text());
            p->setUsername(mUsername->text());
            p->setRememberPassword(mRememberPassword->isChecked());
            p->setPassword(mPassword->text());
            p->setTasksUrl(mTasksUrl->text());
            p->setUseSTasks(mUseSTasks->isChecked());
            p->setJournalsUrl(mJournalsUrl->text());
            p->setUseSJournals(mUseSJournals->isChecked());
        }
    }
}

void ResourceCalDavConfig::setupUI() {
    TQVBoxLayout *vertical = new TQVBoxLayout(this);

    TQGridLayout *mainLayout = new TQGridLayout( this );

    // URL
    TQLabel *label = new TQLabel( i18n( "URL:" ), this );
    mUrl = new TQLineEdit( this );
    mainLayout->addWidget( label, 1, 0 );
    mainLayout->addWidget( mUrl, 1, 1 );

    // Tasks URL
    TQLabel *tlabel = new TQLabel( i18n( "Tasks URL:" ), this );
    mTasksUrl = new TQLineEdit( this );
    mainLayout->addWidget( tlabel, 3, 0 );
    mainLayout->addWidget( mTasksUrl, 3, 1 );

    // Use Task URL checkbox
    mUseSTasks = new TQCheckBox( i18n("Use separate Tasks URL"), this );
    mainLayout->addWidget(mUseSTasks, 2, 0 );

    // Journals URL
    TQLabel *jlabel = new TQLabel( i18n( "Journals URL:" ), this );
    mJournalsUrl = new TQLineEdit( this );
    mainLayout->addWidget( jlabel, 5, 0 );
    mainLayout->addWidget( mJournalsUrl, 5, 1 );

    // Use Journal URL checkbox
    mUseSJournals = new TQCheckBox( i18n("Use separate Journals URL"), this );
    mainLayout->addWidget(mUseSJournals, 4, 0 );

    // Username
    label = new TQLabel( i18n( "Username:" ), this );
    mUsername = new TQLineEdit( this );
    mainLayout->addWidget( label, 6, 0 );
    mainLayout->addWidget( mUsername, 6, 1 );

    // Password
    label = new TQLabel( i18n( "Password:" ), this );
    mPassword = new TQLineEdit( this );
    mPassword->setEchoMode( TQLineEdit::Password );
    mainLayout->addWidget( label, 7, 0 );
    mainLayout->addWidget( mPassword, 7, 1 );

    // Remember password checkbox
    mRememberPassword = new TQCheckBox( i18n("Remember password"), this );
    mainLayout->addWidget(mRememberPassword, 8, 1);

    mTasksUrl->setEnabled(mUseSTasks->isChecked());
    connect( mUseSTasks, TQ_SIGNAL( toggled( bool ) ),
           TQ_SLOT( slotSTasksToggled( bool ) ) );

    mJournalsUrl->setEnabled(mUseSJournals->isChecked());
    connect( mUseSJournals, TQ_SIGNAL( toggled( bool ) ),
           TQ_SLOT( slotSJournalsToggled( bool ) ) );

    // configs
    TQHBoxLayout* horizontal = new TQHBoxLayout(this);

    // Reload config
    mReloadConfig = new CalDavReloadConfig(this);
    horizontal->addWidget(mReloadConfig);

    // Save config
    mSaveConfig = new CalDavSaveConfig(this);
    horizontal->addWidget(mSaveConfig);

    // FIXME: This feature does not work; hide the UI elements for later use
    mRememberPassword->hide();
    label->hide();
    mPassword->hide();

    // combining layouts
    vertical->addLayout(mainLayout);
    vertical->addLayout(horizontal);
}

void ResourceCalDavConfig::slotSTasksToggled( bool enabled ) {
    mTasksUrl->setEnabled(enabled);
}

void ResourceCalDavConfig::slotSJournalsToggled( bool enabled ) {
    mJournalsUrl->setEnabled(enabled);
}

#include "config.moc"

// EOF ========================================================================
