using System;
using System.Globalization;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Collections;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using Message;

namespace TMC_Tool
{
  public partial class MainWindow : Window
  {

    private void changeLanguage()
    {
      Dictionary<string, string> language = new Dictionary<string, string>();
      txt["btnOpen"] = "開く";
      txt["OK"] = "OK";
      txt["Cancel"] = "キャンセル";
      txt["Yes"] = "はい";
      txt["No"] = "いいえ";
      txt["Auto"] = "自動";
      txt["Info"] = "情報";
      txt["Error"] = "エラー";
      txt["Caution"] = "注意";
      txt["Confirm"] = "確認";
      txt["Message"] = "メッセージ";
      txt["textStatus"] = "ファイルを開いて下さい";
      txt["ExitWithoutSave"] = "変更後保存されていません。このまま終了しますか？";
      txt["Exit"] = "終了する";
      txt["Add"] = "追加";
      txt["Del"] = "削除";
      txt["Delete"] = "削除";
      txt["Get"] = "取得";
      txt["Replace"] = "置換";
      txt["UnsupportedArea"] = "";

      txt["Saved"] = "保存しました";
      txt["NotTMC"] = "TMCファイルではありません";
      txt["UnsupportedTMC"] = "対応しているTMCファイルではありません";
      txt["UnsupportedFile"] = "対応しているファイルではありません";
      txt["FailedToReopen"] = "再読込に失敗しました";
      txt["ConfirmOpenFile"] = "このファイルを開きますか？";
      txt["ConfirmFileUpdated"] = "下記ファイルが更新されました。開きなおしますか？";

      txt["AddObjGrp"] = "オブジェクトグループを追加...";
      txt["AddObj"] = "オブジェクトを追加";
      txt["DeleteObj"] = "オブジェクトを削除";
      txt["DeleteAllVtxIdx"] = "頂点・Idxを全て削除";
      txt["DeleteAllVtxIdxCancel"] = "全て削除を取り消し";
      txt["VgrpChangeCancel"] = "VtxGrpの変更を取り消す";
      txt["GetMaterial"] = "マテリアル情報を取得して変更...";

      txt["VtxIdxGrpAdd"] = "これを元に追加";
      txt["VtxIdxGrpDel"] = "削除";
      txt["VtxIdxGrpChangeCancel"] = "変更を取り消す";

      txt["ConfirmObjDelete"] = "選択しているオブジェクトを削除しますか？\r\n（オブジェクトグループの選択は無視されます）";
      txt["ConfirmAllDelete"] = "選択しているオブジェクトの頂点とIdxを全て削除しますか？\r\n（オブジェクトグループの選択は無視されます）";
      txt["ConfirmAllDataDelete"] = "使用しているオブジェクトの頂点とIdxを全て削除しますか？";
      txt["ConfirmAddVtxGrp"] = "頂点グループを追加しますか？\r\n（選択している頂点グループが元になります）";
      txt["ConfirmDelVtxGrp"] = "選択している頂点グループを削除しますか？";

      txt["Overwrite"] = "ファイルを上書きしますか？";
      txt["OverwriteYes"] = "上書きする";

      txt["Visible"] = "表示";
      txt["Hidden"] = "非表示";
      txt["Glasses"] = "眼鏡";

      txt["getMatTitle"] = "取得するマテリアル情報";
      txt["getMatLabelTmcFile"] = "マテリアル情報を取得するTMCファイル";
      txt["getMatLabelGetObj"] = "取得するオブジェクト";
      txt["getMatLabelMatData"] = "取得するマテリアル情報";
      txt["getMatTexParam"] = "テクスチャパラメータ";
      txt["getMatTextAlert"] = "追加時には選択しているオブジェクトのインデックスが変更されます";

      txt["editMtrColTitle"] = "MtrColを編集";
      txt["editMatecpTitle"] = "matecpを編集";
      txt["inputObjNameTitle"] = "名前を入力";

      txt["Parameter"] = "パラメータ";
      txt["InfluenceObj"] = "影響を受けるオブジェクト";

      txt["DelAndAdd"] = "削除して追加";
      txt["ConfirmParamDelAndAdd"] = "選択しているものを追加する場合、以下のものが削除されますが、追加しますか？";

      txt["ConfirmAdd"] = "追加しますか？";
      txt["ConfirmReplace"] = "置換しますか？";
      txt["SameMtrCol"] = "同じパラメーターのMtrColが存在します。";
      txt["SameMateCp"] = "同じパラメーターのmatecpが存在します。";
      txt["SameMCAMTRL"] = "同じパラメーターのMCAMTRLが存在します。";


      string filePath = System.AppDomain.CurrentDomain.BaseDirectory + @"\Language.dat";
      if (!File.Exists(filePath))
      {
        return;
      }

      using (var sr = new StreamReader(filePath))
      {
        while (!sr.EndOfStream)
        {
          string[] inLine = sr.ReadLine().Split('\t');
          if (inLine.Length == 0)
          {
            continue;
          }
          else if (inLine[0] == "Type")
          {
            langType = inLine[2].Trim();
          }
          else if (inLine[0] == langType)
          {
            language[inLine[1].Trim()] = inLine[2].Trim();
          }
        }

        List<string> keys = new List<string>();
        foreach (var key in txt.Keys)
        {
          keys.Add(key);
        }
        foreach (string key in keys)
        {
          if (language.ContainsKey(key)) txt[key] = Regex.Unescape(language[key]);
        }

        if (language.ContainsKey("btnOpen")) btnOpen.Content = language["btnOpen"];
        if (language.ContainsKey("btnOpen")) cmdOpen.Header = language["btnOpen"];
        if (language.ContainsKey("cmdRevert")) cmdRevert.Header = language["cmdRevert"];
        if (language.ContainsKey("btnSave")) btnSave.Content = language["btnSave"];
        if (language.ContainsKey("btnSaveAs")) btnSaveAs.Content = language["btnSaveAs"];
        if (language.ContainsKey("textStatus"))
        {
          textStatus.Path = language["textStatus"];
        }
        if (language.ContainsKey("Edit")) labelEdit.Content = language["Edit"];
        if (language.ContainsKey("cbKeepData")) cbKeepData.Content = language["cbKeepData"];
        if (language.ContainsKey("dgcName")) dgcName.Header = language["dgcObj"];
        if (language.ContainsKey("dgcToggle")) dgcToggle.Header = language["dgcToggle"];
        //if (language.ContainsKey("dgcGlass")) dgcGlass.Header = language["dgcGlass"];
        if (language.ContainsKey("dgcVtxCount")) dgcVtxCount.Header = language["dgcVtxCount"];
        if (language.ContainsKey("dgcIdxCount")) dgcIdxCount.Header = language["dgcIdxCount"];
        if (language.ContainsKey("dgcEnvironmentMap")) dgcEnvironmentMap.Header = language["dgcEnvironmentMap"];
        if (language.ContainsKey("dgcTransparent")) dgcTransparent.Header = language["dgcTransparent"];
        if (language.ContainsKey("dgcDoubleSided")) dgcDoubleSided.Header = language["dgcDoubleSided"];
        if (language.ContainsKey("dgcCastShadow")) dgcCastShadow.Header = language["dgcCastShadow"];
        if (language.ContainsKey("dgcReceiveShadow")) dgcReceiveShadow.Header = language["dgcReceiveShadow"];

        if (language.ContainsKey("dgcObj")) dgcObj.Header = language["dgcObj"];
        if (language.ContainsKey("dgcVtxCount")) dgcGrpVtxCount.Header = language["dgcVtxCount"];
        if (language.ContainsKey("dgcIdxCount")) dgcGrpIdxCount.Header = language["dgcIdxCount"];
        if (language.ContainsKey("dgcUVCount")) dgcUVCount.Header = language["dgcUVCount"];
      }
    }

  }
}
