#ifndef _PROCOMMON_H_
#define _PROCOMMON_H_

#pragma once
#include "CommonStruct.h"

#pragma pack (2)

//Track引用信息
typedef struct tagTrackRef{
	UINT idLoc;		//位置id
	UINT idStyle;	//风格ID
	char segNo;		//原片段号
	char chan;		//原通道号
	char prog;		//当前乐器号
	char vol;		//当前音量
/*
	tagTrackRef(){
		memset( this, 0, sizeof(tagTrackRef) );
	}
*/
}TTRACKREF, *PTTRACKREF;

//原创风格信息
typedef struct tagStyleOrigin{
	WORD	cost;				//使用消费
	WORD 	score;				//评分 (score/100)10分制
	int		paid;				//支付次数
	int		state;				//状态

	TSTYLEDETAIL detail;

	tagStyleOrigin(){
		cost = 0;
		score = 0;
		paid = 0;
		state = 0;
	}
}TSTYLEORIGIN, *PTSTYLEORIGIN;

//本地风格信息
typedef struct tagStyleLocal{
	short	iTempo;				//原速
	short	iTimesignature;		//节拍 ( 0=4/4, 1=3/4, 2=2/4, 3=6/8 )

	char 	strStyleName[40];	//风格名称 UTF8
	char	nSegNum[4];			//伴奏/加花/前奏/尾奏个数
	char	aIEBars[2][8];		//前/尾奏小节数  (0-3大调 4-7小调)
	char	nSegVol[4][8];		//片段音量

	TTRACKREF trkRef[4][8][16]; //轨道引用信息

	tagStyleLocal(){
		memset( this, 0, sizeof(tagStyleLocal) );
	}
}TSTYLELOCAL, *PTSTYLELOCAL;

//分享Track引用信息
typedef struct tagShareTrackRef{
	UINT idStyle;	//原创风格ID
	char segNo;		//原片段号
	char chan;		//原通道号
	char prog;		//当前乐器号
	char vol;		//当前音量
}TSHARETRACKREF, *PTSHARETRACKREF;

//分享的重组风格信息
typedef struct tagStyleShare{
	int 	idAuthor;			//作者ID
	WORD 	score;				//评分 (score/100)10分制

	short	iTempo;				//原速
	short	iTimesignature;		//节拍 ( 0=4/4, 1=3/4, 2=2/4, 3=6/8 )
	char	type[2];			//风格分类
	char	nSegNum[4];			//伴奏/加花/前奏/尾奏个数
	char	aIEBars[2][8];		//前/尾奏小节数  (0-3大调 4-7小调)
	char	nSegVol[4][8];		//片段音量

	//以下部分可变长度传输和存储
	char	strAuthor[40];		//作者名称 UTF8
	char 	strStyleName[40];	//风格名称 UTF8
	char 	strDescription[120];	//风格描述 UTF8

	TSHARETRACKREF trkRef[4][8][16]; //轨道引用信息

	tagStyleShare(){
		memset( this, 0, sizeof(tagStyleShare) );
	}
}TSTYLESHARE, *PTSTYLESHARE;

//专业版风格结构体
typedef struct tagProStyle{
	UINT	idLoc;				//位置id
	UINT	idStyle;			//风格ID

	union{
		PTSTYLEORIGIN pOrigin;
		PTSTYLELOCAL  pLocal;
		PTSTYLESHARE  pShare;
	};

	tagProStyle(){
		memset( this, 0, sizeof(tagProStyle) );
	}

	~tagProStyle(){
		if( idLoc==0 ){
			if( pOrigin )
				delete pOrigin;
		}
		else if( idLoc==1 ){
			if( pShare )
				delete pShare;
		}
		else{
			if( pLocal )
				delete pLocal;
		}
	}
}TPROSTYLE, *PTPROSTYLE;

//制作风格信息结构体
typedef struct tagMakeStyleInfo{
	short	price;				//购买消费
	short	cost;				//使用消费
	TSTYLEDETAIL detail;		//详细信息

	tagMakeStyleInfo(){
		price = 0;
		cost = 0;
	}
}TMAKESTYLEINFO, *PMAKETSTYLEINFO;

#pragma pack()

#endif //_COMMONSTRUCT_H_