/*
 * privacyruledlg.cpp
 * Copyright (C) 2006  Remko Troncon
 *
 * 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 library; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
 *
 */

#include "privacyruledlg.h"
#include "privacylistitem.h"

PrivacyRuleDlg::PrivacyRuleDlg()
{
    ui_.setupUi(this);

    ui_.cb_action->addItem(tr("Deny"), PrivacyListItem::Deny);
    ui_.cb_action->addItem(tr("Allow"), PrivacyListItem::Allow);

    ui_.cb_type->addItem(tr("JID"), PrivacyListItem::JidType);
    ui_.cb_type->addItem(tr("Group"), PrivacyListItem::GroupType);
    ui_.cb_type->addItem(tr("Subscription"), PrivacyListItem::SubscriptionType);
    ui_.cb_type->addItem(tr("*"), PrivacyListItem::FallthroughType);

    connect(ui_.cb_type,SIGNAL(currentIndexChanged(const QString&)),SLOT(type_selected(const QString&)));
    connect(ui_.pb_cancel,SIGNAL(clicked()),SLOT(reject()));
    connect(ui_.pb_ok,SIGNAL(clicked()),SLOT(accept()));
}

void PrivacyRuleDlg::setRule(const PrivacyListItem& item)
{
    // Type
    if (item.type() == PrivacyListItem::SubscriptionType) {
        ui_.cb_type->setCurrentIndex(ui_.cb_type->findData(item.type()));
        ui_.cb_value->setCurrentIndex(ui_.cb_value->findData(item.value()));
    } else {
        ui_.cb_type->setCurrentIndex(ui_.cb_type->findData(item.type())); // clears combo as well
        ui_.cb_value->insertItem(0, item.value());
    }

    // Action
    ui_.cb_action->setCurrentIndex(ui_.cb_action->findData(item.action()));

    // Selection
    ui_.ck_messages->setChecked(item.message());
    ui_.ck_queries->setChecked(item.iq());
    ui_.ck_presenceIn->setChecked(item.presenceIn());
    ui_.ck_presenceOut->setChecked(item.presenceOut());
}

PrivacyListItem PrivacyRuleDlg::rule() const
{
    PrivacyListItem item;

    // Type & value
    PrivacyListItem::Type t = (PrivacyListItem::Type)ui_.cb_type->itemData(ui_.cb_type->currentIndex()).toInt();
    if(t == PrivacyListItem::SubscriptionType) {
        item.setType(t);
        item.setValue(ui_.cb_value->itemData(ui_.cb_value->currentIndex()).toString());
    }
    else {
        item.setType(t);
        item.setValue(ui_.cb_value->currentText());
    }

    // Action
    item.setAction((PrivacyListItem::Action)ui_.cb_action->itemData(ui_.cb_action->currentIndex()).toInt());

    // Selection
    item.setMessage(ui_.ck_messages->isChecked());
    item.setIQ(ui_.ck_queries->isChecked());
    item.setPresenceIn(ui_.ck_presenceIn->isChecked());
    item.setPresenceOut(ui_.ck_presenceOut->isChecked());

    return item;
}

void PrivacyRuleDlg::type_selected(const QString& type)
{
    ui_.cb_value->clear();
    ui_.cb_value->setItemText(ui_.cb_value->currentIndex(), "");
    PrivacyListItem::Type t = (PrivacyListItem::Type)ui_.cb_type->itemData(ui_.cb_type->currentIndex()).toInt();
    if (t == PrivacyListItem::SubscriptionType) {
        ui_.cb_value->addItem(tr("None"), "none");
        ui_.cb_value->addItem(tr("Both"), "both");
        ui_.cb_value->addItem(tr("From"), "from");
        ui_.cb_value->addItem(tr("To"), "to");
        ui_.cb_value->setEditable(false);
    }
    else {
        ui_.cb_value->setEditable(true);
    }

    if (type == tr("*")) {
        ui_.cb_value->setEnabled(false);
    }
    else {
        ui_.cb_value->setEnabled(true);
    }
}
