#ifndef ADDRESSITEM_H
#define ADDRESSITEM_H

#include "camp-data.h"
#include <QObject>
#include <QSharedPointer>
#include <QWeakPointer>
#include <QDecDouble.hh>
#include <odb/core.hxx>

#include <addressbookdata.h>

class CampData;

#pragma db object
class AddressItem : public QObject
{
    Q_OBJECT
    Q_PROPERTY(QString firstName READ firstName WRITE setFirstName)
    Q_PROPERTY(QString lastName READ lastName WRITE setLastName)
    Q_PROPERTY(QString address READ address WRITE setAddress)
    Q_PROPERTY(QDecDouble price READ price WRITE setPrice)
    Q_PROPERTY(QDecDouble sale READ sale WRITE setSale)
    Q_PROPERTY(QDecDouble totalPrice READ totalPrice WRITE setTotalPrice)
    Q_PROPERTY(bool owner READ owner WRITE setOwner)

public:
    explicit AddressItem(QObject *parent = 0);

    int id() const;
    void setId(int id);

    QString firstName() const;
    void setFirstName(const QString &firstName);

    QString lastName() const;
    void setLastName(const QString &lastName);

    QString address() const;
    void setAddress(const QString &address);

    QDecDouble price() const;
    void setPrice(QDecDouble price);

    QWeakPointer<CampData> campData() const;
    void setCampData(const QWeakPointer<CampData> &campData);

    PersonPricePtr personPrice() const;
    void setPersonPrice(const PersonPricePtr &personPrice);

    AddressbookDataPtr adbItem() const;
    void setAdbItem(const AddressbookDataPtr &adbItem);

    bool owner() const;
    void setOwner(bool owner);

    QDecDouble totalPrice() const;
    void setTotalPrice(QDecDouble totalPrice);

    QDecDouble sale() const;
    void setSale(QDecDouble sale);

private:
    friend class odb::access;
#pragma db id auto
    int m_id;
    QString m_firstName;
    QString m_lastName;
    QString m_address;
    AddressbookDataPtr m_adbItem;
    int m_price;
    int m_totalPrice;
    int m_sale;
    #pragma db not_null
    QWeakPointer<CampData> m_campData;
    PersonPricePtr m_personPrice;
    bool m_owner;
};

#endif // ADDRESSITEM_H
