using Microsoft.AnalysisServices.Tabular;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Metadata_Translator
{
    public class MetadataObjectContainer
    {
        public virtual NamedMetadataObject TabularObject { get; protected set; }
        public TranslatedProperty TranslatedProperty { get; protected set; }

        public Guid TemporaryObjectId { get; protected set; }
        public MetadataObjectContainer(NamedMetadataObject metadataObject, TranslatedProperty translatedProperty)
        {
            TabularObject = metadataObject;
            TranslatedProperty = translatedProperty;
            TemporaryObjectId = Guid.NewGuid();
        }

        public override string ToString()
        {
            switch(TranslatedProperty)
            {
                case TranslatedProperty.Caption:
                    return $"{TabularObject.ObjectType} - Caption";
                case TranslatedProperty.Description:
                    return $"{TabularObject.ObjectType} - Description";
                case TranslatedProperty.DisplayFolder:
                    return $"{TabularObject.ObjectType} - DisplayFolder";
                default:
                    return TabularObject.ObjectType.ToString();
            }
        }

        public virtual string GetUniqueName(string namePrefix)
        {
           return (string.IsNullOrEmpty(namePrefix)) ? TemporaryObjectId.ToString() : $"{namePrefix}{GetFullName(TabularObject)}#{TranslatedProperty}";
        }

        protected virtual string GetFullName(MetadataObject metadataObject)
        {
            string fullName = string.Empty;

            if(metadataObject is NamedMetadataObject tabularObject)
            {
                string parentName = (tabularObject.Parent != null) ? GetFullName(tabularObject.Parent) : string.Empty;
                fullName = string.Concat(parentName, "#", tabularObject.Name);
            }

            return fullName;
        }
    }
}