using System.Linq;
using System;
using System.Reflection;
using NLog;

namespace NzbDrone.Core.Datastore
{
    public class MigrationsHelper
    {
        private static readonly Logger logger = LogManager.GetCurrentClassLogger();


        public static void Run(string connectionString, bool trace)
        {
            SqlCeProxy.EnsureDatabase(connectionString);

            logger.Trace("Preparing to run database migration");

            try
            {
                Migrator.Migrator migrator;
                if (trace)
                {
                    migrator = new Migrator.Migrator("sqlserverce", connectionString, Assembly.GetAssembly(typeof(MigrationsHelper)), true, new MigrationLogger());
                }
                else
                {
                    migrator = new Migrator.Migrator("sqlserverce", connectionString, Assembly.GetAssembly(typeof(MigrationsHelper)));
                }

                migrator.MigrateToLastVersion();
                logger.Info("Database migration completed");


            }
            catch (Exception e)
            {
                logger.FatalException("An error has occurred while migrating database", e);
                throw;
            }
        }



        public static string GetIndexName(string tableName, params string[] columns)
        {
            return String.Format("IX_{0}_{1}", tableName, String.Join("_", columns));
        }
    }




}