using UnityEngine;

using Codice.Client.BaseCommands;
using PlasticGui;
using Unity.PlasticSCM.Editor.UI;

namespace Unity.PlasticSCM.Editor
{
    internal class UVCSNotificationStatus
    {
        internal IncomingChangesStatus IncomingChanges { get; set; }

        internal WorkspaceStatusResult WorkspaceStatusResult { get; set; }

        internal enum IncomingChangesStatus
        {
            None,
            Changes,
            Conflicts
        }

        internal Texture2D GetIcon()
        {
            // conflicts has precedence over everything else
            if (IncomingChanges == IncomingChangesStatus.Conflicts)
                return Images.GetPlasticNotifyConflictIcon();

            // incoming changes scenarios
            if (IncomingChanges == IncomingChangesStatus.Changes)
            {
                if (WorkspaceStatusResult != null)
                {
                    // both incoming changes and pending changes
                    return Images.GetPlasticNotifyPendingChangesAndIncomingIcon();
                }

                // incoming changes only
                return Images.GetPlasticNotifyIncomingIcon();
            }

            // pending changes only
            if (WorkspaceStatusResult != null)
                return Images.GetPlasticNotifyPendingChangesIcon();

            // default state
            return Images.GetPlasticViewIcon();
        }

        internal string GetPendingChangesInfoTooltipText()
        {
            if (WorkspaceStatusResult == null)
                return null;

            return PlasticLocalization.Name.PendingChangesInfo.GetString(
                WorkspaceStatusResult.Changes.Count);
        }

        internal void Clean()
        {
            IncomingChanges = IncomingChangesStatus.None;
            WorkspaceStatusResult = null;
        }
    }
}