//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose: 
//
//=============================================================================//

#ifndef WAVEFILE_H
#define WAVEFILE_H
#ifdef _WIN32
#pragma once
#endif

#include "itreeitem.h"
#include "SoundEmitterSystem/isoundemittersystembase.h"
#include "sentence.h"

class CSoundEntry;
class CAudioSource;
class CVCDFile;

class CWaveFile : public ITreeItem
{
public:
	// One or both may be valid
	CWaveFile( CVCDFile *vcd, CSoundEntry *se, char const *filename );

	~CWaveFile();

	static int GetLanguageId();

	CVCDFile	*GetOwnerVCDFile();
	CSoundEntry	*GetOwnerSoundEntry();

	void		SetName( char const *filename );

	char const	*GetName() const;
	char const	*GetFileName() const;

	char const	*GetSentenceText();
	void		SetSentenceText( char const *newText );

	void		ValidateTree( mxTreeView *tree, mxTreeViewItem* parent );

	bool		HasLoadedSentenceInfo() const;
	void				EnsureSentence();


	virtual CWorkspace	*GetWorkspace() { return NULL; }
	virtual CProject	*GetProject() { return NULL; }
	virtual CScene		*GetScene() { return NULL; }
	virtual CVCDFile	*GetVCDFile() { return NULL; }
	virtual CSoundEntry	*GetSoundEntry() { return NULL; }
	virtual CWaveFile	*GetWaveFile() { return this; }

	void		Play();

	bool		GetVoiceDuck();
	void		SetVoiceDuck( bool duck );
	void		ToggleVoiceDucking();

	virtual void Checkout( bool updatestateicons = true );
	virtual void Checkin( bool updatestateicons = true );

	bool		IsCheckedOut() const;
	int			GetIconIndex() const;

	virtual void MoveChildUp( ITreeItem *child );
	virtual void MoveChildDown( ITreeItem *child );

	virtual void		SetDirty( bool dirty );

	virtual bool		IsChildFirst( ITreeItem *child );
	virtual bool		IsChildLast( ITreeItem *child );

	void				SetThreadLoadedSentence( CSentence& sentence );

	void				ExportValveDataChunk( char const *tempfile );
	void				ImportValveDataChunk( char const *tempfile );

	void				GetPhonemeExportFile( char *path, int maxlen );

private:

	CAudioSource		*m_pWaveFile;
	CSentence			m_Sentence;

	enum
	{
		MAX_SOUND_NAME = 256,
		MAX_SCRIPT_FILE = 64,
		MAX_SOUND_FILENAME = 128,
	};

	char				m_szName[ MAX_SOUND_FILENAME ];
	char				m_szFileName[ MAX_SOUND_FILENAME ];

	CVCDFile			*m_pOwner;
	CSoundEntry			*m_pOwnerSE;

	bool				m_bSentenceLoaded;
};

#endif // WAVEFILE_H