using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using FLocal.Core;
using FLocal.Common;
using FLocal.Common.dataobjects;

namespace FLocal.ImportConsole {
	class UploadProcessor {
		public static void ProcessUpload(string pathToUpload) {
			User uploader = User.LoadByName("Guest 127.0.0.1");
			DirectoryInfo directoryInfo = new DirectoryInfo(pathToUpload);
			int i=0;
			foreach(FileSystemInfo _info in directoryInfo.GetFiles()) {
				if(i%100 == 0) {
					Console.Write("[" + (int)(i/100) + "]");
				}
				FileInfo info = _info as FileInfo;
				//Console.WriteLine("Processing " + info.FullName);
				if(!info.Name.StartsWith("file")) {
					Console.Write("!");
				} else {
					string[] parts = info.Name.Split('.');
					if(parts.Length != 2) throw new FLocalException("wrong file name");
					int raw = int.Parse(parts[0].PHPSubstring(4));
					int id;
					switch(parts[1].ToLower()) {
						case "jpg":
							id = raw;
							break;
						case "gif":
							id = 500000 + raw;
							break;
						case "png":
							id = 600000 + raw;
							break;
						default:
							throw new FLocalException("wrong extension");
					}
					if(info != null) {
						try {
							Upload.LoadById(id);
							Console.Write("-");
						} catch(NotFoundInDBException) {
							try {
								UploadManager.UploadFile(
									info.OpenRead(),
									info.Name,
									info.LastWriteTime,
									uploader,
									id
								);
							} catch(UploadManager.AlreadyUploadedException e) {
								Console.WriteLine(id + " md5 is equal to that of " + e.uploadId);
								Console.ReadLine();
							} catch(Exception e) {
								Console.WriteLine(e.GetType().FullName + ": " + e.Message);
								Console.WriteLine(e.StackTrace);
								throw;
							}
							Console.Write("+");
							//Console.WriteLine("Processed " + info.FullName);
						}
					}
				}
				i++;
			}
		}
	}
}
