// Ryzom - MMORPG Framework <http://dev.ryzom.com/projects/ryzom/>
// Copyright (C) 2010  Winch Gate Property Limited
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as
// published by the Free Software Foundation, either version 3 of the
// License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program.  If not, see <http://www.gnu.org/licenses/>.

#ifndef NLGEORGES_ITEM_H
#define NLGEORGES_ITEM_H

#include "string_ex.h"
#include "form.h"

namespace NLOLDGEORGES
{

class CLoader;
class CItemElt;
class CItemEltAtom;
class CItemEltStruct;
class CItemEltList;

class CItem  
{
protected:
	CLoader* pl;
	CItemEltStruct* pitemes;
//	CItemEltList* pitemelparents;
//	CItemEltAtom* pitemeacomments;
	std::vector< std::pair< CStringEx, CStringEx > > vsxparents;
	CStringEx moldfilename;

public:
	CItem();
	virtual ~CItem();

	void Clear();
	void SetLoader( CLoader* const _pl );
	void New( const CStringEx& _sxdfnfilename );
	void Load( const CStringEx& _sxfilename );
	void Load( const CStringEx& _sxfilename, const CStringEx _sxdate );
	void Save( const CStringEx& _sxfilename );
	bool Update();

	// Convert CItem to a CForm (in is this)
	void MakeForm (CForm &out);
	// Convert CForm to CItem (out is this)
	void MakeItem (CForm &in);

	void SetCurrentValue( const unsigned int _index, const CStringEx s );
	uint GetNbElt() const;
	uint GetNbParents() const;
	uint GetNbElt( const unsigned int _index ) const;
	uint GetInfos( const unsigned int _index ) const;
	CStringEx GetName( const unsigned int _index ) const;
	CStringEx GetCurrentResult( const unsigned int _index ) const;
	CStringEx GetCurrentValue( const unsigned int _index ) const;
	CStringEx GetFormula( const unsigned int _index ) const;
	bool IsEnum( const unsigned int _index ) const; 
	bool IsPredef( const unsigned int _index ) const; 
	bool CanEdit( const unsigned int _index ) const; 
	void GetListPredef( const unsigned int _index, std::vector< CStringEx >& _vsx ) const;

	CItemElt* GetElt( const unsigned int _index ) const;
	CItemElt* GetElt( const CStringEx _sxname ) const;

	void AddList( const unsigned int _index ) const;
	void DelListChild( const unsigned int _index ) const;
	void VirtualSaveLoad();

	void AddParent( const unsigned int _index = 0);
	void DelParent( const unsigned int _index );
	void ClearParents ();
	CStringEx GetParent( const unsigned int _index ) const;
	void SetParent( const unsigned int _index, const CStringEx _sx );
	CStringEx GetActivity( const unsigned int _index ) const;
	void SetActivity( const unsigned int _index, const CStringEx _sx );
};

} // NLGEORGES

#endif // NLGEORGES_ITEM_H