using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using Perforce;

namespace Perforce.sln.bld.gui
{
    public partial class DepotPathDlg : Form
    {
        public DepotPathDlg(P4.Repository rep)
        {
            InitializeComponent();

            Init(rep);
        }

        public String SelectedFile
        {
            get
            {
                return mSolutionPathTxt.Text;
            }
        }

		private P4.P4Server pServer;

		public void Init(P4.Repository rep)
        {
            if (rep == null)
            {
                mDepotTreeView.Enabled = false;
                return;
            }
            // Initialize the depot tree view
			P4.P4Directory root = new P4.P4Directory(rep, null, "depot", "//depot", null, null);
            TreeNode rootNode = new TreeNode("Depot");
            rootNode.Tag = root;
            rootNode.ImageIndex = 0;
            rootNode.SelectedImageIndex = 0;
            rootNode.Nodes.Add(new TreeNode("empty"));
            mDepotTreeView.Nodes.Clear();
            mDepotTreeView.Nodes.Add(rootNode);
        }

        private void mDepotTreeView_BeforeExpand(object sender, TreeViewCancelEventArgs e)
        {
            // insanity check, should never be null
            if (e.Node == null)
            {
                e.Cancel = true;
                return;
            }

            TreeNode node = e.Node;
            // clear any old data
            node.Nodes.Clear();

			P4.P4Directory p4Dir = (P4.P4Directory)node.Tag;

            if (String.IsNullOrEmpty(p4Dir.DepotPath) || !p4Dir.Expand())
            {
                e.Cancel = true;
                return;
            }

            if ((p4Dir.Files != null) && (p4Dir.Files.Count > 0))
            {
				foreach (P4.FileMetaData file in p4Dir.Files)
                {
                    if (Path.GetExtension(file.DepotPath.Path) == ".sln")
                    {
                        TreeNode child = new TreeNode(file.DepotPath.Path);
                        child.Tag = file;
                        child.ImageIndex = 2;
                        child.SelectedImageIndex = 2;
                        e.Node.Nodes.Add(child);
                    }
                }
            }

            if ((p4Dir.Subdirectories != null) && (p4Dir.Subdirectories.Count > 0))
            {
				foreach (P4.P4Directory p4SubDir in p4Dir.Subdirectories)
                {
                    if (!p4SubDir.InDepot)
                        continue;

                    TreeNode child = new TreeNode(p4SubDir.Name);
                    child.Tag = p4SubDir;
                    child.ImageIndex = 1;
                    child.SelectedImageIndex = 1;
                    child.Nodes.Add(new TreeNode("<empty>"));
                    e.Node.Nodes.Add(child);
                }
            }
        }

        private void mDepotTreeView_AfterSelect(object sender, TreeViewEventArgs e)
        {
            Object obj  = mDepotTreeView.SelectedNode.Tag;
			if (obj is P4.FileMetaData)
			{
				mSolutionPathTxt.Text = mDepotTreeView.SelectedNode.Text.ToString();
			}
			else
			{
				mSolutionPathTxt.Text = string.Empty;
			}
        }

		private void mOkBtn_Click(object sender, EventArgs e)
		{

		}

		private void mSolutionPathTxt_TextChanged(object sender, EventArgs e)
		{
			string path = mSolutionPathTxt.Text;
			
			mOkBtn.Enabled = !string.IsNullOrEmpty(path);
		}
    }
}