#include <CtrlLib/CtrlLib.h>
#include <CtrlCore/CtrlCore.h>

using namespace Upp;

GUI_APP_MAIN
{

	TopWindow w;
	LineEdit e,f; 
	Vector<String> v1, v2; // Vectors for Storing File Names
	String s;      // String for temporary use
	bool r=false;  // r to keep the "MoveFile" API Return
	int err_no=0;  // err_no to keep "GetLastError" API Return
	
	// GUI SETUP CODE
	e.SetRect(10,10,680,100);
	f.SetRect(10,120,680,220);
	w.SetRect(0,0,700,350);
	
	w<<e<<f;

	// ADDING SOME DUMMY BUT VALID FILE NAMES THAT DO EXIST
	v1.Add("E:\\TEMP\\1.txt");
	v1.Add("E:\\TEMP\\2.txt");
	v1.Add("E:\\TEMP\\3.txt");
	
	// CATENATING VECTOR 'v1' INOT TEMP STRING 's' TO LOAD ALL FILE NAMEs INTO LINEEDIT
	for(int i=0; i<v1.GetCount(); i++){
		 s<<v1[i]<<"\n";
	}
	
	e.Set(s);
	
	
	// FETCHING THE FILE NAME BACK FROM THE LINEEDIT AND SPLITTING THEM INTO SEPERATE STRING
	s.Clear();
	
	s=e.Get();
	
	v2=Split(s, "\n", true);
	
	// TEST-1: RENAMEING FILES USING v1 FILE NAME TO v1 FILE NAME (Ya Same Names. for tests only!)
	s.Clear();

	s<<"DEBUG INFO: TEST-1:\n";
	
	for(int i=0; i<v1.GetCount(); i++){
		
		r=MoveFile(v1[i],v1[i]);
		
		(!r)? err_no=GetLastError() : err_no=0;	
		
		s<<"RENAME "
		 <<v1[i]<<" => "<<v1[i]
		 <<" [Done="<<r<<"] [Error="
		 <<err_no<<"]\n";		
	}
	

	// TEST-2: RENAMEING FILES USING v1 FILE NAME TO v2 FILE NAME (Ya Same Names. but from LineEdit Ctrl)
	s<<"\nDEBUG INFO: TEST-2:\n";
	
	for(int i=0; i<v1.GetCount(); i++){
		
		r=MoveFile(v1[i],v2[i]);
		
		(!r)? err_no=GetLastError() : err_no=0;	
		
		s<<"RENAME "
		 <<v1[i]<<" => "<<v2[i]
		 <<" [Done="<<r<<"] [Error="
		 <<err_no<<"]\n";		
	}	
	
	s<<"\n***Error Code 123(0x7B) = ERROR_INVALID_NAME\n";
	
	// PRINTING THE RESULTS
	f.Set(s);
	
	// Executing the Window
	w.Run();
}