using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace PDFJSCS
{
    public partial class Home : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            string path = Path.Combine(HttpContext.Current.Server.MapPath("~"), "PDF");
            string password = "PDFJSCS";
            
            if (Session["SPECIAL"] == null)
                Session["SPECIAL"] = RandomSpecString(32);

            if (Session["SALT"] == null)
                Session["SALT"] = RandomSaltString(16);

            Crypto crypto = new Crypto(password, Session["SPECIAL"].ToString(), Session["SALT"].ToString());

            // файлы в папке PDF
            List<string> files = new List<string>(Directory.EnumerateFiles(path));

            for (int i = 0; i < files.Count(); i++)
            {
                string fileName = files[i].Split('\\').Last().ToLower(); // имя файла
                fileName = fileName.Substring(0, fileName.IndexOf(".pdf"));
                FileInfo fInfo = new FileInfo(files[i]); // данные о файле
                string filePath = Path.Combine("PDF", fInfo.Name); // путь к файлу

                // номер строки
                Label count = new Label();
                count.Text = string.Format("{0:D3}.  ", i + 1);
                count.Style.Add("margin", "5 5 15 5");

                // ссылка
                HyperLink link = new HyperLink();
                link.Target = "_blank";
                link.NavigateUrl = string.Format("Viewer.aspx?path={0}", crypto.Encrypt(filePath));
                link.Text = fileName;

                // размер файла в Кб
                Label size = new Label();
                size.Text = string.Format("  ({0} Кб)", fInfo.Length / 1024);
                size.Style.Add("margin", "5 5 15 5");

                this.divFiles.Controls.Add(count);
                this.divFiles.Controls.Add(link);
                this.divFiles.Controls.Add(size);
                this.divFiles.Controls.Add(new LiteralControl("<br />")); // перенос строки
            }
        }

        private static string RandomSpecString(int length)
        {
            const string chars = "abcdef0123456789";
            Random random = new Random();
            string result = string.Empty;

            while (result.Length < length)
                result += chars[random.Next(chars.Length)];

            return result;
        }

        private static string RandomSaltString(int length)
        {
            const string chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
            Random random = new Random();
            string result = string.Empty;

            while (result.Length < length)
                result += chars[random.Next(chars.Length)];

            return result;
        }
    }
}