/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2016 Raytrix GmbH. All rights reserved.
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

/************************************************************************/
/*  This example demonstrates:                                          */
/*      - Working with a camera.                                        */
/*      - Calculating refocus image                                     */
/*      - Displaying result                                             */
/************************************************************************/


// Example heavily reworked into RxCamera class

#include "RxReader.h"

#include <lcm/lcm-cpp.hpp>


/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// <summary>
/// 	Main entry-point for this application.
/// </summary>
///
/// <param name="argc"> Number of command-line arguments. </param>
/// <param name="argv"> Array of command-line argument strings. </param>
///
/// <returns> Exit-code for the process - 0 for success, else an error code. </returns>
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////



int main(int argc, char* argv[])
{

	// Load args 
	if (argc != 3) {
		std::cout << "Missing input args: EyeRISProfileProc *.rays displayType" << std::endl;
		return 1;
	}


	char* endptr;
	string filePath = string(argv[1]);
	char displayType = *argv[2];


	std::cout << "rays file: " << filePath << std::endl;


	RxReader reader(filePath);
	switch (displayType) {
	case 't':
		reader.setDisplayType(RxProcessor::TOTAL_FOCUS);
		break;
	default:
		reader.setDisplayType(RxProcessor::TOTAL_FOCUS);
		break;
	}

	reader.start();

	bool bEnd = false;

	while (!bEnd) {

		if (reader.bFinished)
			break;

		if (_kbhit()) {
			switch (_getch()) {
			case 'q':
				bEnd = true;
				break;
			case 'r':
				reader.setDisplayType(RxProcessor::RAW);
				break;
			case 'p':
				if (reader.isPaused()) {
					reader.unPause();
				}
				else {
					reader.pause();
				}
				break;
			case 't':
				reader.setDisplayType(RxProcessor::TOTAL_FOCUS);
				break;
			case 'd':
				reader.setDisplayType(RxProcessor::DEPTH_MAP);
				break;
			case 'f':
				reader.setDisplayType(RxProcessor::REFOCUS);
				break;
			}

		}
		_sleep(100);
		//lcm.handleTimeout(100);
	}

	reader.stop();

	// The example is finished
	printf("finished.\n");

	return 0;
}
