#ifndef CAMPDATA_H
#define CAMPDATA_H

#include "camp-data.h"
#include <QObject>
#include <QDate>
#include <QDecDouble.hh>
#include <odb/core.hxx>
#include <odb/qt/list.hxx>

#include <data/season.h>

#pragma db object
class CampData : public QObject
{
    Q_OBJECT
    Q_PROPERTY(QString numSer READ numSer WRITE setNumSer)
    Q_PROPERTY(QDate start READ start WRITE setStart)
    Q_PROPERTY(QDate end READ end WRITE setEnd)
    Q_PROPERTY(QString ownerFirstame READ ownerFirstame WRITE setOwnerFirstame)
    Q_PROPERTY(QString ownerLastname READ ownerLastname WRITE setOwnerLastname)
    Q_PROPERTY(QString ownerAddress READ ownerAddress WRITE setOwnerAddress)
    Q_PROPERTY(QDecDouble totalPrice READ totalPrice WRITE setTotalPrice)
    Q_PROPERTY(QDecDouble sale READ sale WRITE setSale)
    Q_PROPERTY(bool fixedSale READ fixedSale WRITE setFixedSale)
    Q_PROPERTY(QDecDouble totalSale READ totalSale WRITE setTotalSale)
    Q_PROPERTY(bool onVoucher READ onVoucher WRITE setOnVoucher)

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

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

    QDate start() const;
    void setStart(const QDate &start);

    QDate end() const;
    void setEnd(const QDate &end);

    QString ownerFirstame() const;
    void setOwnerFirstame(const QString &ownerFirstame);

    QString ownerLastname() const;
    void setOwnerLastname(const QString &ownerLastname);

    QString ownerAddress() const;
    void setOwnerAddress(const QString &ownerAddress);

    QOdbList<QSharedPointer<ServiceItem> > services() const;
    void setServices(const QOdbList<QSharedPointer<ServiceItem> > &services);
    void addServiceItem(ServiceItemPtr serviceItem);
    void removeServiceItem(ServiceItemPtr serviceItem);

    QOdbList<AddressItemPtr> people() const;
    void setPeople(const QOdbList<AddressItemPtr> &people);
    void addPerson(AddressItemPtr person);
    void removePerson(AddressItemPtr person);

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

    SeasonPtr season() const;
    void setSeason(const SeasonPtr &season);

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

    bool fixedSale() const;
    void setFixedSale(bool fixedSale);

    QString numSer() const;
    void setNumSer(const QString &numSer);

    QDecDouble totalSale() const;
    void setTotalSale(QDecDouble totalSale);

    QDecDouble fullPrice() const;
    void setFullPrice(QDecDouble fullPrice);

    bool onVoucher() const;
    void setOnVoucher(bool onVoucher);

private:
    friend class odb::access;
#pragma db id auto
    int m_id;
    QString m_numSer;
    QDate m_start;
    QDate m_end;
    QString m_ownerFirstame;
    QString m_ownerLastname;
    QString m_ownerAddress;
    #pragma db value_not_null inverse(m_campData)
    QOdbList<ServiceItemPtr> m_services;
    #pragma db value_not_null inverse(m_campData)
    QOdbList<AddressItemPtr> m_people;
    int m_fullPrice;
    int m_totalPrice;
    int m_sale;
    int m_totalSale;
    bool m_fixedSale;
    SeasonPtr m_season;
    bool m_onVoucher;
};

#endif // CAMPDATA_H
