#ifndef SREVICEITEM_H
#define SREVICEITEM_H

#include "camp-data.h"
#include <QObject>
#include <QSharedPointer>
#include <QWeakPointer>
#include <QDecDouble.hh>

#include <odb/core.hxx>
#include <accservice.h>

class CampData;

#pragma db object
class ServiceItem : public QObject
{
    Q_OBJECT
    Q_PROPERTY(QString name READ name WRITE setName)
    Q_PROPERTY(QString code READ code WRITE setCode)
    Q_PROPERTY(QString description READ description WRITE setDescription)
    Q_PROPERTY(QDecDouble price READ price WRITE setPrice)
    Q_PROPERTY(QDecDouble fullPrice READ fullPrice WRITE setFullPrice)
    Q_PROPERTY(QDecDouble sale READ sale WRITE setSale)
    Q_PROPERTY(QDecDouble totalPrice READ totalPrice WRITE setTotalPrice)
    Q_PROPERTY(AccService::ServiceType type READ type WRITE setType)
    Q_ENUMS(AccService::ServiceType)

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

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

    QString name() const;
    void setName(const QString &name);

    QString code() const;
    void setCode(const QString &code);

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

    bool salePossible() const;
    void setSalePossible(bool salePossible);

    AccService::ServiceType type() const;
    void setType(const AccService::ServiceType &type);

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

    QString description() const;
    void setDescription(const QString &description);

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

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

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

private:
    friend class odb::access;
#pragma db id auto
    int m_id;
    QString m_name;
    QString m_code;
    QString m_description;
    int m_price;
    int m_fullPrice;
    int m_totalPrice;
    int m_sale;
    bool m_salePossible;
    AccService::ServiceType m_type;
    #pragma db not_null
    QWeakPointer<CampData> m_campData;
};

#endif // SREVICEITEM_H
