using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Web.Core;
using Patcher.Data.Patch;
using Patcher.DB;
using System.IO;

namespace Patcher
{
	class Context
	{

		private readonly IUpdateParams updateParams;
		
		public List<PatchId> getPatchesList() {
			return (from patchId in this.updateParams.getPatchesList() orderby patchId ascending select patchId).ToList();
		}

		public readonly IDBTraits DbDriver;

		public readonly IInteractiveConsole console;

		public string EnvironmentName {
			get {
				return this.updateParams.EnvironmentName;
			}
		}

		public string PatchesTable {
			get {
				return this.updateParams.PatchesTable;
			}
		}

		public Stream loadPatch(PatchId patchId) {
			return this.updateParams.loadPatch(patchId);
		}

		public Transaction CreateTransaction() {
			return TransactionFactory.Create(this.updateParams.DbDriverName, this.updateParams.ConnectionString);
		}

		public Context(IUpdateParams updateParams, IInteractiveConsole console) {
			this.updateParams = updateParams;
			this.DbDriver = DBTraitsFactory.GetTraits(updateParams.DbDriverName);
			this.console = console;
		}

	}

}
