using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Diagnostics;
using System.IO;


namespace CobProgAid
{
    public partial class ShowCode : Form
    {

        //public readonly string CSV = ".csv";
        //public readonly string DIF = ".dif";
        //public readonly string JSON = ".json";

        string oldTxt;
        bool bSynch;
        string finalFileSafe;

        public savedFile SavedFile { get; set; }

        public ShowCode()
        {
            InitializeComponent();
            oldTxt = "";
            bSynch = false;
        }

        public bool BSynch
        {
            get
            {
                return bSynch;
            }
            set
            {
                bSynch = value;
                btnSynch.Visible = bSynch;
                btnSynchOut.Visible = bSynch;
            }
        }

        public TextBox CodeShower
        {
            get { return txtCode; }
            set { txtCode = value; }
        }

        public string Labeltext
        {
            get { return lblCodeType.Text; }
            set { lblCodeType.Text = value; }
        }

        private frmProgAidHome parentWindow;

        public frmProgAidHome Parent
        {
            get { return parentWindow; }
            set { parentWindow = value; }
        }

        private void btnClose_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void txtCode_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.Control && e.KeyCode == Keys.A)
            {
                txtCode.SelectAll();
            }
        }

        private void txtCode_TextChanged(object sender, EventArgs e)
        {
            if (txtCode.Text.Length > oldTxt.Length)
            {
                string tmpNewText = txtCode.Text.Substring(oldTxt.Length);

                //Debug.Write(tmpNewText);
                //Tag bort denna kommentering för att testa på vad som precis skrivs på log-fönster.
                oldTxt = txtCode.Text;
            }
        }

        private void btnSynch_Click(object sender, EventArgs e)
        {
            //codeCompleter Cc = new codeCompleter(parentWindow.CmbLastFile.Text,parentWindow.FldPref);
            //string fieldCompl = "";
            //this.CodeShower.Text = " InPath = " + Cc.PathId + "\r\n InFile = " + Cc.FileId + "\r\n codeFile = " + Cc.CcFileInId + "\r\n codePath = " + Cc.PathId+Cc.CcFileInId + "\r\n -------------- \r\n" + this.CodeShower.Text;
            //Cc.TryFill_In_Dic();

            //foreach (CobRow cr in parentWindow.RowList)
            //{
            //    if (!cr.isAttribute && !cr.SampleStr.Equals(parentWindow.NOMOVE))
            //    {
            //        if (Cc.WorkDicIn != null && Cc.WorkDicIn.Count > 0)
            //        {
            //            if (Cc.WorkDicIn.TryGetValue(cr.FieldName, out fieldCompl))
            //            {
            //                cr.MoveCode = fieldCompl;
            //            }
            //        }
            //        if (cr.MoveCode == null) { cr.MoveCode = " "; }
            //        Cc.WorkDicIn[cr.FieldName]=cr.MoveCode;
            //    }
            //}

            //Cc.Save_In_Dic();

            //refreshWindow("IN");

            //this.CodeShower.Text = " InPath = " + Cc.PathId + "\r\n InFile = " + Cc.FileId + "\r\n codeFile = " + Cc.CcFileInId + "\r\n codePath = " + Cc.PathId + Cc.CcFileInId + "\r\n -------------- \r\n" + this.CodeShower.Text;

        }

 
        private string deQuote(string inString)
        {
            string tmpStr = "";
            char[] x = inString.ToArray<char>();
            for (int i = 0; i < x.Length; i++)
            {
                if (x[i] == '\"')
                {
                    if (i < x.Length - 1)
                    {
                        if (x[i + 1] == '\"')
                        {
                            i++;
                            tmpStr += "\"";
                        }
                    }
                }
                else tmpStr += x[i];
            }
            return tmpStr;
        }

        private string enQuote(string inString)
        {
            string tmpStr = "";
            char[] x = inString.ToArray<char>();
            for (int i = 0; i < x.Length; i++)
            {
                if (x[i] == '\"')
                {
                    {
                        tmpStr += "\"\"";
                    }
                }
                else tmpStr += x[i];
            }
            return "\"" + tmpStr + "\"";
        }


 

 
        private void btnSynchOut_Click(object sender, EventArgs e)
        {
            //codeCompleter Cc = new codeCompleter(parentWindow.CmbLastFile.Text,parentWindow.FldPref);
            //string fieldCompl = "";
            //this.CodeShower.Text = " InPath = " + Cc.PathId + "\r\n InFile = " + Cc.FileId + "\r\n codeFile = " + Cc.CcFileOutId + "\r\n codePath = " + Cc.PathId + Cc.CcFileOutId + "\r\n -------------- \r\n" + this.CodeShower.Text;
            //Cc.TryFill_Out_Dic();

            //// wrkDic = new Dictionary<string, string>();
            //foreach (CobRow cr in parentWindow.RowList)
            //{
            //    if (!cr.isAttribute && !cr.SampleStr.Equals(parentWindow.NOMOVE))
            //    {
            //        if (Cc.WorkDicOut != null && Cc.WorkDicOut.Count > 0)
            //        {
            //            if (Cc.WorkDicOut.TryGetValue(cr.FieldName, out fieldCompl))
            //            {
            //                cr.MoveFromCode = fieldCompl;
            //            }
            //        }
            //        if (cr.MoveFromCode == null) { cr.MoveFromCode = " "; }
            //        Cc.WorkDicOut[cr.FieldName] = cr.MoveFromCode;
            //    }
            //}

            //Cc.Save_Out_Dic();

            //refreshWindow("OUT");

            //this.CodeShower.Text = " InPath = " + Cc.PathId + "\r\n InFile = " + Cc.FileId + "\r\n codeFile = " + Cc.CcFileOutId + "\r\n codePath = " + Cc.PathId + Cc.CcFileOutId + "\r\n -------------- \r\n" + this.CodeShower.Text;
        }

        private void btnSaveAktualText_Click(object sender, EventArgs e)
        {
            SaveRegCopyFile saveWin = new SaveRegCopyFile();
            saveWin.SavedFile = this.SavedFile;
            saveWin.FileData = this.txtCode.Text;
            saveWin.ShowDialog();
            finalFileSafe = saveWin.finalFileName;
            btnCompare.Enabled = (finalFileSafe.Trim() != "");
        }

        private void ShowCode_Load(object sender, EventArgs e)
        {
            if (parentWindow == null)
            {
                btnSaveAktualText.Enabled = false;
            }
            else btnSaveAktualText.Enabled = true;
            btnCompare.Enabled = false;
        }

        private void btnCompare_Click(object sender, EventArgs e)
        {
            try
            {
                string existing = finalFileSafe.Substring(finalFileSafe.LastIndexOf("\\"));
                Process.Start("C:\\Program Files (x86)\\WinMerge\\WinMergeU.exe", finalFileSafe + " Q:\\kII20\\cpy\\" + existing);
            }
            catch (Exception ex)
            {
                MessageBox.Show("Problem vid starta WinMerge :" + ex.Message);
            }
        }

    }
}
