/*
Скрипт  просматривает все файлы *.mis в заданном каталоге (если не задан - в текущем) и добавляет строку радиовышки в секцию NSTATIONARY, если радио там нет.
Если была замена исходный файл получает расширение mib. Если в каталоге уже есть файлы с расширением mib, то результат замены не сохраняется и файл не изменяется.
Положение радиовышки определяется координатами первой точки маршрута игрока + Delta
Имя радиовышки задано переменной Radio. Если переменная пуста (Radio=''), то имя берется из имени каталога кампании (см. SelectByCounry() ниже).
*/

//var Radio = "Radio_Moscow"		//использовать указанное радио
var Radio = ""					//определить радио по стране каталога

var Delta = [1500,1500]			//смещение радиовышки от точки появления игрока
var Army = 0					//0 1 2


var	NumRadio=-1					//Номер объекта NumRadio_Static vehicles.radios.Beacon (max+1 из секции NSTATIONARY)		
var nFiles = 0					//кол-во обработанных файлов

//Если Radio не задано определим его по имени каталога кампании
function SelectByCounry(pth){
	if (Radio.length > 0)
		return Radio		//радио задано, не будем менять
	
	pth=pth.toUpperCase()
	var is=pth.lastIndexOf('\\CAMPAIGN\\')
	var co = pth.substr(is+10,2)	//двубуквенная аббревиатура страны из каталога кампании

/*	имена объектов радиовышек
	Radio_Moscow
	Radio_BBC
	Radio_Honolulu
	Radio_Suomen_Yleisradio
	Magyar_Radio
	Radio_Roma
	Grossdeutscher_Rundfunk
	Radio_Tokyo
	Radio_Paris
*/

	if ('FI'.indexOf(co) != -1)
		return 'Radio_Suomen_Yleisradio'
	
	if ('DE,DU,YU'.indexOf(co) != -1)
		return 'Grossdeutscher_Rundfunk'
		
	if ('FR,SP'.indexOf(co) != -1)
		return 'Radio_Paris'

	if ('GB,UM,UN,US,PL'.indexOf(co) != -1)
		return 'Radio_BBC'	

	if ('HU'.indexOf(co) != -1)
		return 'Magyar_Radio'
		
	if ('IT'.indexOf(co) != -1)
		return 'Radio_Roma'
	
	if ('JA,CN'.indexOf(co) != -1)
		return 'Radio_Tokyo'
	
	if ('IN,RN,RZ,VI'.indexOf(co) != -1)
		return 'Radio_Honolulu'

	if ('RU'.indexOf(co) != -1)
		return 'Radio_Moscow'

//для всех остальных
	return 'Radio_Paris'

// нераспределенные страны
//CN ES GO GR KP KR LC LS MN NA NN NR NU RA RH Ro RR SH Sk

}



//================================================================
//для удобстава обработки строк:
String.prototype.trimRight=function() // убирает все пробелы в конце строки
{
  return this.replace(/\s+$/,'');
}

String.prototype.trimLeft=function() // убирает все пробелы в начале строки
{
  return this.replace(/^\s+/,'');
}

String.prototype.trim=function()	 // убирает все пробелы в начале и в конце строки
{
  return this.trimRight().trimLeft();
}
//================================================================

var FSO = new ActiveXObject("Scripting.FileSystemObject");


main()

function main() {
	var args = WScript.Arguments;

	var WS = WScript.CreateObject("WScript.Shell"),
		Directory = WS.CurrentDirectory,
		main_folder_path

	if (args.length == 0)
		main_folder_path = Directory
	else
		main_folder_path = args.item(0)
	
	if (main_folder_path.charAt(0) == "?") {
		WScript.Echo("Добавить радио во все миссии, если его там еще нет\nИсходный файл миссии получает расширение .mib")
		return
	}
	
	Radio = SelectByCounry(main_folder_path)

	EnumerateFiles(FSO.GetFolder(main_folder_path))
	WScript.Echo('Обработано файлов ',nFiles);
}


// ================================================================
function EnumerateFiles(_folder){
    var more_files = new Enumerator(_folder.Files);
    for (;!more_files.atEnd();more_files.moveNext()){
        one_file = more_files.item();
		if (one_file.Path.indexOf(".mis") > 0) 
			insertRadio(one_file.Path)
    }
}

//Вставить радио в очередную миссию fil
function insertRadio(fil){
	if (fil.indexOf('\\info') != -1)			//info*.mis не обрабатывать
		return 0

	var f, s, sr, ForReading;
	ForReading = 1, s= "";
	
	f = FSO.OpenTextFile(fil, ForReading, false);
	fo = FSO.CreateTextFile("tmp.mis", true, false);
	
	sectWay='[]'
	isWay=false									//началась секция маршрута игрока
	isStat=false								//началась секция NSTATIONARY
	
	var XP = []
	XP[0] = -1									//координаты 1-й точки полета игрока пока не определены
	XP[1] = -1
	
	RAdded = false								//пока радио не добавлено

	while (!f.AtEndOfStream){
		s = f.ReadLine()
		sr = s.toUpperCase()
		if (sr.indexOf(Radio.toUpperCase()) != -1)
			break								//заданное радио уже есть. файл не корректировать
		
		if (sr.indexOf('[') != -1) {		
			if (isStat){						//только что закончилась NSTATIONARY и заданное Radio в ней не обнаружено
				XP[0] = XP[0] + Delta[0]		//добавим смешение
				XP[1] = XP[1] + Delta[1]
				NumRadio += 1					//max+1
				strRadio='  '+NumRadio+'_Static vehicles.radios.Beacon$'+Radio+' '+Army+' '+ XP[0]+' '+XP[1]+' 360.00 0.0'
				RAdded=true
				fo.WriteLine(strRadio)			//Добавить радиовышку
			}
								
			isWay=false
			isStat=false
			if (sr.trim() == sectWay)
				isWay = true					//началась секция маршрута
			if (sr.trim() == '[NSTATIONARY]')	//началась секция стационарных объектов
				isStat = true
		}
		
		fo.WriteLine(s)		
		if (RAdded) 							//радио добавлено - можно прекратить провери
			continue
		
		k=sr.indexOf(" PLAYER ")
		if( k != -1 )
			sectWay='['+sr.substr(k+8).trim()+'_WAY]'		//имя секции маршрута игрока
	
		if (isWay){											//смотрим маршрут
			is= sr.indexOf('TAKEOFF ')						
			if (is != -1)
				getCoord(sr.substr(is+8),XP)				//есть координаты взлета
			
			is= sr.indexOf('NORMFLY ')
			if (is != -1)
				getCoord(sr.substr(is+8),XP)				//есть координаты первой точки
		
			if (XP[0] != -1)
				isWay = false								//координаты определены - больше секция Way не нужна
		}
		if (isStat){
			is=sr.indexOf('_')
			if (is!= -1){
				n=1*sr.substr(0,is)
				if (n>NumRadio)
					NumRadio=n
			}
		}
	}

	f.Close()
	fo.Close()
	
	if (RAdded)
		try {
			FSO.MoveFile(fil,fil.replace(/\.mis$/,'.mib'))		//резервную копию сохраним
			FSO.CopyFile('tmp.mis',fil, true)					//перезапишем исходный
			WScript.Echo('Добавлено '+Radio+' '+fil);
			nFiles += 1
		}catch(e){
			if (e != 0){
				WScript.Echo('Ошибка переименования файла '+fil);
			}
		}finally{
			FSO.DeleteFile("tmp.mis")
		}
}

//получить 1-е и 2-е число из строки
function getCoord(sti,P){
	var k,s
	s=sti.trim()
	k=s.indexOf(" ")
	P[0]=1*s.substr(0,k)
	s=s.substr(k+1).trim()
	k=s.indexOf(" ")
	P[1]=1*s.substr(0,k)
}
