//////////////////////////////////////////////////////////////////////
//
// audioFileLocationBase.h
//
// Basic file location resolving: Uses simple path concatenation logic.
// Exposes basic path functions for convenience.
// For more details on resolving file location, refer to section "File Location" inside
// "Going Further > Overriding Managers > Streaming / Stream Manager > Low-Level I/O"
// of the SDK documentation. 
//
// Copyright (c) 2006 Audiokinetic Inc. / All Rights Reserved
//
//////////////////////////////////////////////////////////////////////

#ifndef _AK_FILE_LOCATION_BASE_H_
#define _AK_FILE_LOCATION_BASE_H_

struct AkFileSystemFlags;

#include <AK/SoundEngine/Common/IAkStreamMgr.h>

class AudioFileLocationBase
{
public:
	AudioFileLocationBase();
	virtual ~AudioFileLocationBase();

	//
	// Global path functions.
	// ------------------------------------------------------

	// Base path is prepended to all file names.
	// Audio source path is appended to base path whenever uCompanyID is AK and uCodecID specifies an audio source.
	// Bank path is appended to base path whenever uCompanyID is AK and uCodecID specifies a sound bank.
	// Language specific dir name is appended to path whenever "bIsLanguageSpecific" is true.
	AKRESULT SetBasePath(
		const AkOSChar*   in_pszBasePath
		);
	AKRESULT SetBankPath(
		const AkOSChar*   in_pszBankPath
		);
	AKRESULT SetAudioSrcPath(
		const AkOSChar*   in_pszAudioSrcPath
		);
	// Note: SetLangSpecificDirName() does not exist anymore. See release note WG-19397 (Wwise 2011.2).

	//
	// Path resolving services.
	// ------------------------------------------------------

	// String overload.
	// Returns AK_Success if input flags are supported and the resulting path is not too long.
	// Returns AK_Fail otherwise.
	AKRESULT GetFullFilePath(
		const AkOSChar *	in_pszFileName,		// File name.
		AkFileSystemFlags * in_pFlags,			// Special flags. Can be NULL.
		AkOpenMode			in_eOpenMode,		// File open mode (read, write, ...).
		AkOSChar *			out_pszFullFilePath // Full file path.
		);  

	// ID overload. 
	// The name of the file will be formatted as ID.ext. This is meant to be used with options
	// "Use SoundBank Names" unchecked, and/or "Copy Streamed Files" in the SoundBank Settings.
	// For more details, refer to the SoundBank Settings in Wwise Help, and to section "Identifying Banks" inside
	// "Sound Engine Integration Walkthrough > Integrate Wwise Elements into Your Game > Integrating Banks > 
	// Integration Details - Banks > General Information" of the SDK documentation.
	// Returns AK_Success if input flags are supported and the resulting path is not too long.
	// Returns AK_Fail otherwise.
	AKRESULT GetFullFilePath(
		AkFileID			in_fileID,			// File ID.
		AkFileSystemFlags *	in_pFlags,			// Special flags. 
		AkOpenMode			in_eOpenMode,		// File open mode (read, write, ...).
		AkOSChar *			out_pszFullFilePath	// Full file path.
		);

protected:

	// Internal user paths.
	AkOSChar			m_szBasePath[AK_MAX_PATH];
	AkOSChar			m_szBankPath[AK_MAX_PATH];
	AkOSChar			m_szAudioSrcPath[AK_MAX_PATH];

};

#endif //_AK_FILE_LOCATION_BASE_H_
