#pragma once

#include "Confirm.h"

#include <HPL_CLRLib.h>

namespace MapConverter {

	using namespace System;
	using namespace System::ComponentModel;
	using namespace System::Collections;
	using namespace System::Windows::Forms;
	using namespace System::Data;
	using namespace System::Drawing;

	/// <summary>
	/// Form1 の概要
	///
	/// 警告: このクラスの名前を変更する場合、このクラスが依存するすべての .resx ファイルに関連付けられた
	///          マネージ リソース コンパイラ ツールに対して 'Resource File Name' プロパティを
	///          変更する必要があります。この変更を行わないと、
	///          デザイナと、このフォームに関連付けられたローカライズ済みリソースとが、
	///          正しく相互に利用できなくなります。
	/// </summary>
	public ref class Form1 : public System::Windows::Forms::Form
	{
	public:
		Form1(void)
		{
			InitializeComponent();
			//
			//TODO: ここにコンストラクタ コードを追加します
			//
		}

	protected:
		/// <summary>
		/// 使用中のリソースをすべてクリーンアップします。
		/// </summary>
		~Form1()
		{
			if (components)
			{
				delete components;
			}
		}
	private: System::Windows::Forms::Label^  label1;
	protected: 
	private: System::Windows::Forms::SaveFileDialog^  saveFileDialog1;

	private:
		/// <summary>
		/// 必要なデザイナ変数です。
		/// </summary>
		System::ComponentModel::Container ^components;

#pragma region Windows Form Designer generated code
		/// <summary>
		/// デザイナ サポートに必要なメソッドです。このメソッドの内容を
		/// コード エディタで変更しないでください。
		/// </summary>
		void InitializeComponent(void)
		{
			this->label1 = (gcnew System::Windows::Forms::Label());
			this->saveFileDialog1 = (gcnew System::Windows::Forms::SaveFileDialog());
			this->SuspendLayout();
			// 
			// label1
			// 
			this->label1->AutoSize = true;
			this->label1->Location = System::Drawing::Point(8, 71);
			this->label1->Name = L"label1";
			this->label1->Size = System::Drawing::Size(271, 12);
			this->label1->TabIndex = 0;
			this->label1->Text = L"ここにPlatinumで出力したCSVファイルをドラッグ＆ドロップ";
			// 
			// Form1
			// 
			this->AllowDrop = true;
			this->AutoScaleDimensions = System::Drawing::SizeF(6, 12);
			this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
			this->ClientSize = System::Drawing::Size(292, 172);
			this->Controls->Add(this->label1);
			this->Name = L"Form1";
			this->Text = L"MapConverter";
			this->DragDrop += gcnew System::Windows::Forms::DragEventHandler(this, &Form1::Form1_DragDrop);
			this->DragEnter += gcnew System::Windows::Forms::DragEventHandler(this, &Form1::Form1_DragEnter);
			this->ResumeLayout(false);
			this->PerformLayout();

		}
#pragma endregion
	private: System::Void Form1_DragEnter(System::Object^  sender, System::Windows::Forms::DragEventArgs^  e) {
				 // ドラッグされたとき
				 if( e->Data->GetDataPresent( DataFormats::FileDrop ) ) {
					 e->Effect = DragDropEffects::Copy;
				 } else {
					 e->Effect = DragDropEffects::None;
				 }
			 }
	private: System::Void Form1_DragDrop(System::Object^  sender, System::Windows::Forms::DragEventArgs^  e) {
				 // テスト
				 System::Text::StringBuilder^ strBuilder = gcnew System::Text::StringBuilder(
					 "以下のファイルを変換します。よろしいですか？\n");

				 array<String^>^ aryFilePaths = static_cast<array<String^>^>( e->Data->GetData( DataFormats::FileDrop, false ) );
				 for( int i = 0; i < aryFilePaths->Length; i ++ ) {
					 strBuilder->Append( aryFilePaths[i] );
					 if( i < aryFilePaths->Length - 1 ) {
						 strBuilder->Append( "\n" );
					 }
				 }
				 // 表示
				 Confirm^ lpConfirm = gcnew Confirm();
				 lpConfirm->label1->Text = strBuilder->ToString();
				 
				 lpConfirm->ShowDialog(this);

				 HPL_CLRLib^ lib = gcnew HPL_CLRLib();
				 if( lpConfirm->DialogResult == Windows::Forms::DialogResult::OK ) {
					 for( int i = 0; i < aryFilePaths->Length; i ++ ) {
						 try {
							 // 分割
							 lib->divide2LayerMapInto2CSV( aryFilePaths[i] );

						 } catch( ... ) {
							 String^ str = "[";
							 str += aryFilePaths[i];
							 str += "]の読み込みに失敗しました。続行しますか？";
							Confirm^ lpContinue = gcnew Confirm();
							lpContinue->label1->Text = str;
							lpContinue->ShowDialog();
							if( lpContinue->DialogResult == Windows::Forms::DialogResult::OK ) {
								// 続行
								// do nothing
							} else {
								break;
							}
						 }
					 }
				 }

			 }
	};
}

