using System;
using System.IO;

using Codice.Client.Commands;
using Codice.Client.Common;
using Codice.Client.BaseCommands;
using Codice.LogWrapper;
using PlasticGui;
using Codice.Client.BaseCommands.Sync;


namespace Unity.PlasticSCM.Editor.CollabMigration
{
    internal  class MigrationProgressRender
    {
        internal static string FixNotificationPath(string wkPath, string notification)
        {
            if (notification == null)
                return string.Empty;

            int position = notification.ToLower().IndexOf(wkPath.ToLower());

            if (position < 0)
                return notification;

            return notification.Remove(position, wkPath.Length + 1);
        }

        internal static string GetProgressString(
            CreateWorkspaceFromCollab.Progress status,
            BuildProgressSpeedAndRemainingTime.ProgressData progressData,
            DateTime now,
            double smoothingFactor,
            string updateProgressCalculatingMessage,
            string updateProgressSingularMessage,
            string updateProgressPluralMessage,
            string remainingMessage)
        {
            if (status.CurrentStatus == CreateWorkspaceFromCollab.Progress.Status.Starting)
                return updateProgressCalculatingMessage;

            progressData.StartTimerIfNotStarted(now);

            string updatedSize;
            string totalSize;
            GetFormattedSizes.ForTransfer(
                status.ProcessedSize,
                status.TotalSize,
                out updatedSize,
                out totalSize);
          
            string details = string.Format(
                status.TotalFiles == 1 ?
                    updateProgressSingularMessage :
                    updateProgressPluralMessage,
                updatedSize,
                totalSize,
                status.ProcessedFiles,
                status.TotalFiles,
                BuildProgressSpeedAndRemainingTime.ForTransfer(
                    progressData,
                    now,
                    status.TotalSize,
                    status.ProcessedSize,
                    smoothingFactor,
                    remainingMessage));

            return details;
        }

        static ILog mLog = LogManager.GetLogger("MigrationProgressRender");
    }
}