/*
 $Revision: 1.12 $
 $Date: 2010/03/11 14:42:05 $
 $Author: faust $
 */

#ifndef USER_CONF_H
#define USER_CONF_H

#include <string>
#include <vector>
#include "const.h"
#include "user_ips.h"
#include "resetable.h"
#include "os_int.h"

//-----------------------------------------------------------------------------
struct USER_CONF
{
    USER_CONF()
        : password(),
          passive(0),
          disabled(0),
          disabledDetailStat(0),
          alwaysOnline(0),
          tariffName(),
          address(),
          phone(),
          email(),
          note(),
          realName(),
          corp(),
          service(),
          group(),
          credit(0),
          nextTariff(),
          userdata(USERDATA_NUM),
          creditExpire(0),
          ips()
    {};

    std::string              password;
    int                      passive;
    int                      disabled;
    int                      disabledDetailStat;
    int                      alwaysOnline;
    std::string              tariffName;
    std::string              address;
    std::string              phone;
    std::string              email;
    std::string              note;
    std::string              realName;
    std::string              corp;
    std::vector<std::string> service;
    std::string              group;
    double                   credit;
    std::string              nextTariff;
    std::vector<std::string> userdata;
    time_t                   creditExpire;
    USER_IPS                 ips;
};
//-----------------------------------------------------------------------------
struct USER_CONF_RES
{
    USER_CONF_RES()
        : password(),
          passive(),
          disabled(),
          disabledDetailStat(),
          alwaysOnline(),
          tariffName(),
          address(),
          phone(),
          email(),
          note(),
          realName(),
          group(),
          credit(),
          nextTariff(),
          userdata(USERDATA_NUM, RESETABLE<std::string>()),
          creditExpire(),
          ips()
    {
    };

    USER_CONF_RES & operator=(const USER_CONF & uc)
    {
        userdata.resize(USERDATA_NUM);
        password     = uc.password;
        passive      = uc.passive;
        disabled     = uc.disabled;
        disabledDetailStat = uc.disabledDetailStat;
        alwaysOnline = uc.alwaysOnline;
        tariffName   = uc.tariffName;
        address      = uc.address;
        phone        = uc.phone;
        email        = uc.email;
        note         = uc.note;
        realName     = uc.realName;
        group        = uc.group;
        credit       = uc.credit;
        nextTariff   = uc.nextTariff;
        for (int i = 0; i < USERDATA_NUM; i++)
            {
            userdata[i]  = uc.userdata[i];
            }
        creditExpire = uc.creditExpire;
        ips          = uc.ips;
        return *this;
    };
    operator USER_CONF() const
    {
        USER_CONF uc;
        uc.password     = password;
        uc.passive      = passive;
        uc.disabled     = disabled;
        uc.disabledDetailStat = disabledDetailStat;
        uc.alwaysOnline = alwaysOnline;
        uc.tariffName   = tariffName;
        uc.address      = address;
        uc.phone        = phone;
        uc.email        = email;
        uc.note         = note;
        uc.realName     = realName;
        uc.group        = group;
        uc.credit       = credit;
        uc.nextTariff   = nextTariff;
        for (int i = 0; i < USERDATA_NUM; i++)
            {
            uc.userdata[i]  = userdata[i];
            }
        uc.creditExpire = creditExpire;
        uc.ips          = ips;
        return uc;
    }
    //-------------------------------------------------------------------------

    RESETABLE<std::string>               password;
    RESETABLE<int>                       passive;
    RESETABLE<int>                       disabled;
    RESETABLE<int>                       disabledDetailStat;
    RESETABLE<int>                       alwaysOnline;
    RESETABLE<std::string>               tariffName;
    RESETABLE<std::string>               address;
    RESETABLE<std::string>               phone;
    RESETABLE<std::string>               email;
    RESETABLE<std::string>               note;
    RESETABLE<std::string>               realName;
    RESETABLE<std::string>               group;
    RESETABLE<double>                    credit;
    RESETABLE<std::string>               nextTariff;
    std::vector<RESETABLE<std::string> > userdata;
    RESETABLE<time_t>                    creditExpire;
    RESETABLE<USER_IPS>                  ips;
};
//-----------------------------------------------------------------------------
#endif