#include <iostream>
#include <string.h>
#include "videoInput.h"

#ifdef _DEBUG
#pragma comment(lib, "videoInputD.lib")
#else
#pragma comment(lib, "videoInput.lib")
#endif

// メイン関数
int main(int argc, char* argv[]) {
	videoInput::setVerbose(false);
	videoInput vi;
	auto devList = vi.getDeviceList();

	// 引数が指定されない場合は
	// プログラム情報と
	// すべてのカメラ名を標準出力に列挙する
	if (argc == 1) {
		std::cout << std::endl;
		std::cout << "------------------------------------" << std::endl;
		std::cout << "Camera Finder ver 1.0 by T.Nakaguchi" << std::endl;
		std::cout << "------------------------------------" << std::endl << std::endl;
		std::cout << "Usage: CameraFinder.exe" << std::endl;
		std::cout << "プログラム情報の表示と全カメラ一覧の表示" << std::endl << std::endl;
		std::cout << "Usage: CameraFinder.exe str" << std::endl;
		std::cout << "文字列strでカメラ名を検索し，ヒットしたカメラ番号を表示" << std::endl;
		std::cout << "カメラ番号はプログラムの終了コードにも出力" << std::endl << std::endl;
		std::cout << "Usage: CameraFinder.exe id" << std::endl;
		std::cout << "id番号（数字1桁）のカメラ名の表示" << std::endl << std::endl;

		std::cout << "id  name" << std::endl;
		for (int i = 0; i < devList.size(); i++) {
			std::cout << "[" << i << "] " << devList[i] << std::endl;
		}
		return 0;
	}

	// 引数に一桁の数字が与えられた場合は，そのカメラIDに相当するデバイス名を標準出力に表示する
	if (strlen(argv[1]) == 1 && *argv[1] >= '0' && *argv[1] <= '9') {
		int id = *argv[1] - '0';
		if (id < devList.size()) {
			std::cout << vi.getDeviceName(id) << std::endl;
			return 0;
		}
		else {
			std::cout << "wrong id" << std::endl;
			return -1;
		}
	}

	// 文字列でデバイス名を検索
	for (int i = 0; i < devList.size(); i++) {
		if (devList[i].find(argv[1]) != std::string::npos) {
			std::cout << i << std::endl;
			return i;
		}
	}

	// 検索文字列のデバイスが見つからない時
	std::cout << -1 << std::endl;
	return -1;
}
