using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Windows.Controls.Primitives;
using System.Text.RegularExpressions;
using Microsoft.Win32;
using MSAPI = Microsoft.WindowsAPICodePack;
using System.IO;

namespace CSRender
{
    public partial class MainWindow : Window
    {
        //フォルダ指定のためにファイルをドラッグ
        private void textBox_PreviewDragOver(object sender, System.Windows.DragEventArgs e)
        {
            if (e.Data.GetDataPresent(System.Windows.DataFormats.FileDrop, true))
            {
                e.Effects = System.Windows.DragDropEffects.Copy;
            }
            else
            {
                e.Effects = System.Windows.DragDropEffects.None;
            }
            e.Handled = true;
        }

        //エクスプローラーからテキストボックスにドロップして指定フォルダの場所をペースト
        private void TargetBox_Drop(object sender, System.Windows.DragEventArgs e)
        {
            var dropFiles = e.Data.GetData(System.Windows.DataFormats.FileDrop) as string[];
            if (dropFiles == null) return;
            //カーソルを終端に置く
            targetBox.Text = dropFiles[0];
            targetBox.Focus();
            targetBox.Select(this.targetBox.Text.Length, 0);
        }
        private void RefBox_Drop(object sender, System.Windows.DragEventArgs e)
        {
            var dropFiles = e.Data.GetData(System.Windows.DataFormats.FileDrop) as string[];
            if (dropFiles == null) return;
            //カーソルを終端に置く
            referenceBox.Text = dropFiles[0];
            referenceBox.Focus();
            referenceBox.Select(this.referenceBox.Text.Length, 0);
        }
        private void WorkBox_Drop(object sender, System.Windows.DragEventArgs e)
        {
            var dropFiles = e.Data.GetData(System.Windows.DataFormats.FileDrop) as string[];
            if (dropFiles == null) return;
            //カーソルを終端に置く
            workBox.Text = dropFiles[0];
            workBox.Focus();
            workBox.Select(this.workBox.Text.Length, 0);
            if (reportBox.Text == "")//検版レポートが未入力ならば作業フォルダ先に指定
            {
                reportBox.Text = System.IO.Path.Combine(workBox.Text, "report");
                reportBox.Text += @"\";
            }
        }

        private void ReportBox_Drop(object sender, System.Windows.DragEventArgs e)
        {
            var dropFiles = e.Data.GetData(System.Windows.DataFormats.FileDrop) as string[];
            if (dropFiles == null) return;
            //カーソルを終端に置く
            reportBox.Text = dropFiles[0] + @"\";
            reportBox.Focus();
            reportBox.Select(this.reportBox.Text.Length, 0);
        }

        //参照ボタンClickでフォルダ選択のダイアログを表示（対象フォルダ）
        private void TagetButton_Click(object sender, RoutedEventArgs e)
        {
            
            //フォルダ選択の場合
            var selectFile = new MSAPI::Dialogs.CommonOpenFileDialog();
            selectFile.IsFolderPicker = true;
            selectFile.Title = "フォルダを選択してください";
            selectFile.InitialDirectory = @"C:";
            if (selectFile.ShowDialog() != MSAPI::Dialogs.CommonFileDialogResult.Ok)
            {
                return;
            }
            //共通部分
            targetBox.Text = selectFile.FileName;
        }

        //参照ボタンClickでフォルダ選択のダイアログを表示（リファレンスフォルダ）
        private void ReferenceButton_Click(object sender, RoutedEventArgs e)
        {
            
            //フォルダ選択の場合
            var selectFile = new MSAPI::Dialogs.CommonOpenFileDialog();
            selectFile.IsFolderPicker = true;
            selectFile.Title = "フォルダを選択してください";
            selectFile.InitialDirectory = @"C:";
            if (selectFile.ShowDialog() != MSAPI::Dialogs.CommonFileDialogResult.Ok)
            {
                return;
            }
            //共通部分
            referenceBox.Text = selectFile.FileName;
        }

        //参照ボタンClickでフォルダ選択のダイアログを表示（作業フォルダ）
        private void WorkButton_Click(object sender, RoutedEventArgs e)
        {
            
            //フォルダ選択の場合
            var selectFile = new MSAPI::Dialogs.CommonOpenFileDialog();
            selectFile.IsFolderPicker = true;
            selectFile.Title = "フォルダを選択してください";
            selectFile.InitialDirectory = @"C:";
            if (selectFile.ShowDialog() != MSAPI::Dialogs.CommonFileDialogResult.Ok)
            {
                return;
            }
            //共通部分
            workBox.Text = selectFile.FileName;
            //reportBox.Text = System.IO.Path.Combine(selectFile.FileName, "report") + @"\";
        }

        //参照ボタンClickでフォルダ選択のダイアログを表示（検版レポートパス）
        private void ReportButton_Click(object sender, RoutedEventArgs e)
        {
            
            //フォルダ選択の場合
            var selectFile = new MSAPI::Dialogs.CommonOpenFileDialog();
            selectFile.IsFolderPicker = true;
            selectFile.Title = "フォルダを選択してください";
            selectFile.InitialDirectory = @"C:";
            if (selectFile.ShowDialog() != MSAPI::Dialogs.CommonFileDialogResult.Ok)
            {
                return;
            }
            //共通部分
            reportBox.Text = selectFile.FileName + @"\";
        }

        private void EditEnvFile()
        {
            string appPath = System.Reflection.Assembly.GetExecutingAssembly().Location;  //モジュールのパスを取得
            string appDirectory = appPath.Substring(0, appPath.LastIndexOf(@"\") + 1);    //モジュールの存在するディレクトリを取得
            string dataPath = System.IO.Path.Combine("PureVerify.Data", "RipVerify", "setup", "PureVerifyDlg.env");
            string envFilePath = System.IO.Path.Combine(appDirectory, dataPath);//PureVerifyDlg.envまでのフルパス

            //.envファイルに記述する内容
            string equiosCenterPath = System.IO.Path.Combine(appDirectory, "PureVerify.Data", "EquiosCenter");//EquiosCenterのフルパス
            string workFolderPath = System.IO.Path.Combine(appDirectory, "PureVerify.Data", "RipVerify");//内部作業フォルダのフルパス
            string writeText = "**EquiosCenter: \"" + equiosCenterPath + "\"\r\n";
            writeText += "**WorkDirRoot: \"" + workFolderPath + "\"\r\n";
            writeText += "**InspQuality: \"3\"\r\n";
            writeText += "**MarkDistance: \"50\"\r\n";
            writeText += "**ReportEncodeType: \"1\"\r\n";
            writeText += "**WndPosLeft: \"348\"\r\n";
            writeText += "**WndPosTop: \"125\"\r\n";
            writeText += "**WndPosRight: \"933\"\r\n";
            writeText += "**WndPosBottom: \"556\"\r\n";
            writeText += "**ShowOKList: \"1\"\r\n";

            // StreamWriterオブジェクトのインスタンスを生成
            StreamWriter streamWriter = new StreamWriter(envFilePath, false, Encoding.GetEncoding("Shift_JIS"));
            // Writeメソッドで文字列データを書き込む
            streamWriter.Write(writeText);
            // StreamWriterオブジェクトを閉じる
            streamWriter.Close();

        }
    }
}
