//  The authors have released ID3Lib as Public Domain (PD) and claim no copyright,
//  patent or other intellectual property protection in this work.  This means that
//  it may be modified, redistributed and used in commercial and non-commercial
//  software and hardware without restrictions.  ID3Lib is distributed on an "AS IS"
//  basis, WITHOUT WARRANTY OF ANY KIND, either express or implied.
//  
//  The ID3Lib authors encourage improvements and optimisations to be sent to the
//  ID3Lib coordinator, currently Dirk Mahoney (dirk@id3.org).  Approved
//  submissions may be altered, and will be included and released under these terms.
//  
//  Mon Nov 23 18:34:01 1998


#include "id3_misc_support.h"


int ID3_UnicodeToLatin(char *latin, const wchar_t *unicode, luint len, int inLen)
{
	if	(unicode && latin && len)
		return WideCharToMultiByte(28591, 0, unicode, inLen/*-1*/, latin, len, NULL, NULL) - 1;
	else if (latin && len)
		latin[0]=0;
	return 0;
}

int ID3_UnicodeToLocal(char *local, const wchar_t *unicode, luint len, int inLen)
{
	if	(unicode && local && len)
		return WideCharToMultiByte(CP_ACP, 0, unicode, inLen/*-1*/, local, len, NULL, NULL)-1;
	else if (local && len)
		local[0]=0;
	return 0;
}

int ID3_UnicodeToUTF8(char *local, const wchar_t *unicode, luint len, int inLen)
{
	if	(unicode && local && len)
		return WideCharToMultiByte(CP_UTF8, 0, unicode, inLen/*-1*/, local, len, NULL, NULL)-1;
	else if (local && len)
		local[0]=0;
	return 0;
}

void ID3_AddArtist(ID3_Tag *tag, char *text)
{
	if	(tag->Find(ID3FID_LEADARTIST ) == NULL &&
		tag->Find (ID3FID_BAND ) == NULL &&
		tag->Find (ID3FID_CONDUCTOR ) == NULL &&
		tag->Find (ID3FID_COMPOSER ) == NULL &&
		text && text[0])
	{
		ID3_Frame	*artistFrame=new ID3_Frame;
		artistFrame->SetID(ID3FID_LEADARTIST);
		artistFrame->Field(ID3FN_TEXT).SetLocal(text);
		tag->AddFrame(artistFrame, true);
	}

	return;
}

void ID3_AddArtist_Latin(ID3_Tag *tag, char *text)
{
	if	(tag->Find (ID3FID_LEADARTIST ) == NULL &&
		tag->Find (ID3FID_BAND ) == NULL &&
		tag->Find (ID3FID_CONDUCTOR ) == NULL &&
		tag->Find (ID3FID_COMPOSER ) == NULL &&
		text && text[0])
	{
		ID3_Frame	*artistFrame= new ID3_Frame;

		artistFrame->SetID (ID3FID_LEADARTIST);
		artistFrame->Field(ID3FN_TEXT).SetLatin(text);
		tag->AddFrame (artistFrame, true );

	}

	return;
}



void ID3_AddAlbum(ID3_Tag *tag, char *text)
{
	if	(tag->Find (ID3FID_ALBUM ) == NULL && strlen (text ) > 0 )
	{
		ID3_Frame	*albumFrame;

		if	(albumFrame = new ID3_Frame )
		{
			albumFrame->SetID (ID3FID_ALBUM );

			albumFrame->Field(ID3FN_TEXT).SetLocal(text);
			tag->AddFrame (albumFrame, true );
		}
		else
			ID3_THROW (ID3E_NoMemory );
	}

	return;
}

void ID3_AddAlbum_Latin(ID3_Tag *tag, char *text)
{
	if	(tag->Find(ID3FID_ALBUM) == NULL 
		&& text && text[0])
	{
		ID3_Frame	*albumFrame = new ID3_Frame;
		
			albumFrame->SetID (ID3FID_ALBUM );

			albumFrame->Field(ID3FN_TEXT).SetLocal(text);
			tag->AddFrame (albumFrame, true );
		
	}

	return;
}

void ID3_AddTitle(ID3_Tag *tag, char *text)
{
	if (tag->Find(ID3FID_TITLE) == NULL 
		&& text && text[0])
	{
		ID3_Frame	*titleFrame;

		if	(titleFrame = new ID3_Frame)
		{
			titleFrame->SetID(ID3FID_TITLE);
			titleFrame->Field(ID3FN_TEXT).SetLocal(text);
			tag->AddFrame (titleFrame, true );
		}
		else
			ID3_THROW(ID3E_NoMemory);
	}

	return;
}

void ID3_AddTitle_Latin(ID3_Tag *tag, char *text)
{
	if (tag->Find(ID3FID_TITLE) == NULL 
		&& text && text[0])
	{
		ID3_Frame	*titleFrame= new ID3_Frame;

		titleFrame->SetID(ID3FID_TITLE);
		titleFrame->Field(ID3FN_TEXT).SetLatin(text);
		tag->AddFrame(titleFrame, true);
	}

	return;
}


void ID3_AddLyrics(ID3_Tag *tag, char *text)
{
	if (tag->Find (ID3FID_UNSYNCEDLYRICS ) == NULL && strlen (text ) > 0 )
	{
		ID3_Frame	*lyricsFrame;

		if	(lyricsFrame = new ID3_Frame )
		{
			lyricsFrame->SetID (ID3FID_UNSYNCEDLYRICS );
			lyricsFrame->Field(ID3FN_LANGUAGE).SetLatin("eng");
			lyricsFrame->Field(ID3FN_TEXT ).SetLocal(text);
			tag->AddFrame (lyricsFrame, true );
		}
		else
			ID3_THROW (ID3E_NoMemory );
	}

	return;
}