// Copyright (c) 2010
// by OpenLight Group
// http://openlightgroup.net/
//
// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated 
// documentation files (the "Software"), to deal in the Software without restriction, including without limitation 
// the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and 
// to permit persons to whom the Software is furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all copies or substantial portions 
// of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED 
// TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 
//
// CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
// DEALINGS IN THE SOFTWARE.

using System.Collections.Generic;
using System.Linq;
using System.Web.Services;
using System.IO;
using System;
using System.Collections.ObjectModel;
using System.Web;

namespace MVMFileManagerSite
{
    [WebService(Namespace = "http://OpenLightGroup.net/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    public class WebService : System.Web.Services.WebService
    {
        #region GetLocalFolders
        [WebMethod(Description = "GetLocalFolders")]
        public ObservableCollection<SilverlightFolder> GetLocalFolders()
        {
            string path = this.Context.ApplicationInstance.Server.MapPath(@"~\Files\");
            ObservableCollection<SilverlightFolder> objParentFolder = new ObservableCollection<SilverlightFolder>();
            // Add all directories at this directory.
            DirectoryInfo objDirectoryInfo = new DirectoryInfo(path);

            foreach (DirectoryInfo di in objDirectoryInfo.EnumerateDirectories().OrderBy(x => x.Name))
            {
                // Add the Folder
                SilverlightFolder objAdditionalFolder = new SilverlightFolder();
                objAdditionalFolder.FolderName = di.Name;
                objAdditionalFolder.FullPath = di.FullName;
                objAdditionalFolder.SubFolders = new ObservableCollection<SilverlightFolder>();

                objParentFolder.Add(objAdditionalFolder);
            }

            return objParentFolder;
        }
        #endregion

        #region GetLocalFiles
        [WebMethod(Description = "GetLocalFiles")]
        public ObservableCollection<SilverlightFile> GetLocalFiles(string FolderPath)
        {
            // Remove any .. to prevent backing up directories
            FolderPath = FolderPath.Replace("..", "");
            FolderPath = this.Context.ApplicationInstance.Server.MapPath(@"~\Files\" + FolderPath);

            ObservableCollection<SilverlightFile> colFiles = new ObservableCollection<SilverlightFile>();

            // Add all directories at this directory.
            DirectoryInfo objDirectoryInfo = new DirectoryInfo(FolderPath);

            foreach (var fi in objDirectoryInfo.EnumerateFiles().OrderBy(x => x.Name))
            {
                // Add the Folder
                SilverlightFile objSilverlightFile = new SilverlightFile();
                objSilverlightFile.FileName = fi.Name;
                objSilverlightFile.FilePath = String.Format("{0}?FilePath={1}&FileName={2}",
                    HttpContext.Current.Request.Url.AbsoluteUri.Replace("WebService.asmx", "DownloadFile.aspx"),
                    fi.Directory.Name,
                    fi.Name);

                colFiles.Add(objSilverlightFile);
            }

            return colFiles;
        }
        #endregion
    }
}
