// -*- coding: utf-8 -*-
#ifndef __CLIENTE_H__
#define __CLIENTE_H__

#ifdef WIN32
#ifdef CLIENTE_EXPORTS
#define CLIENTE_API __declspec(dllexport)
#else
#define CLIENTE_API __declspec(dllimport)
#endif
#else
#define CLIENTE_API
#endif

#include <QString>
#include <QtGlobal>
#include "Nombre.hpp"
#include "Direccion.hpp"

enum IndicesCliente{
	ClienteId,
	ClienteNombre,
	ClienteApellidop,
	ClienteApellidom,
	ClienteCorreo,
	ClienteTel,
	ClienteCalle,
	ClienteCol,
	ClienteCiudad,
	ClienteEstado,
	ClienteCP,
	ClientePais
};

/** \brief Abstracci&oacute;n para los datos personales de un cliente.
 *
 * La clase Cliente sirve para almacenar los datos generales de un cliente
 * como son: nombre, correo, tel&eacute;fono y direcci&oacute;n */
class CLIENTE_API Cliente {
public:
	/** Constructor por defecto */
	Cliente();
	Cliente(qint32 id, Nombre const & nom, QString const & correo,
	        QString const & tel, Direccion const & dir);
	/** Destructor por defecto */
	~Cliente();

	/** Define el valor para el nombre
	 * @param nom Valor para el objeto Nombre */
	void nombre(Nombre const & nom);
	/** Define el valor para el correo electr&oacute;nico
	 * @param correo Valor para la variable m_correo */
	void correo(QString const & correo);
	/** Define el valor para el tel&eacute;fono
	 * @param tel Valor para la variable m_tel */
	void tel(QString const & tel);
	/** Define el valor para la Direcci&oacute;n
	 * @param dir Valor para el objeto Direccion */
	void direccion(Direccion const & dir);

	/** Obtiene el valor del identificador del cliente en la base de datos
	* @return El valor de la variable id */
	quint32 id() const;
	/** Obtiene el valor del objeto Nombre
	* @return Una referencia constante de un objeto Nombre */
	Nombre const & nombre() const;
	/** Obtiene el correo electr&oacute;nico
	 * @return El valor de la la variable m_correo */
	QString const & correo() const;
	/** Obtiene el tel&eacute;fono
	 * @return El valor de la variable m_tel */
	QString const & tel() const;
	/** Obtiene el valor del objeto Direccion
	 * @return Una referencia constante de la variable m_direccion */
	Direccion const & direccion() const;

private:
	/// Almacena el identificador del cliente en la base de datos
	quint32 m_id;
	/// Almacena el nombre
	Nombre m_nombre;
	/// Almacena el correo electr&oacutenico
	QString m_correo;
	/// Almacena el tel&eacutefono
	QString m_tel;
	/// Alamacena la direcci&oacuten
	Direccion m_direccion;
};

#endif
