using MediaBrowser.Controller.Entities;
using System;
using System.Collections.Generic;
using System.Linq;
namespace MediaBrowser.Api.Reports
{
    ///  A report helper. 
    public class ReportHelper
    {
        #region [Public Methods]
        ///  Convert field to string. 
        ///  Generic type parameter. 
        ///  The value. 
        ///  Type of the field. 
        ///  The field converted to string. 
        public static string ConvertToString(T value, ReportFieldType fieldType)
        {
            if (value == null)
                return "";
            switch (fieldType)
            {
                case ReportFieldType.String:
                    return value.ToString();
                case ReportFieldType.Boolean:
                    return value.ToString();
                case ReportFieldType.Date:
                    return string.Format("{0:d}", value);
                case ReportFieldType.Time:
                    return string.Format("{0:t}", value);
                case ReportFieldType.DateTime:
                    return string.Format("{0:d}", value);
                case ReportFieldType.Minutes:
                    return string.Format("{0}mn", value);
                case ReportFieldType.Int:
                    return string.Format("", value);
                default:
                    if (value is Guid)
                        return string.Format("{0:N}", value);
                    return value.ToString();
            }
        }
        ///  Gets filtered report header metadata. 
        ///  The report columns. 
        ///  The default return value. 
        ///  The filtered report header metadata. 
        public static List GetFilteredReportHeaderMetadata(string reportColumns, Func> defaultReturnValue = null)
        {
            if (!string.IsNullOrEmpty(reportColumns))
            {
                var s = reportColumns.Split('|').Select(x => ReportHelper.GetHeaderMetadataType(x)).Where(x => x != HeaderMetadata.None);
                return s.ToList();
            }
            else
                if (defaultReturnValue != null)
                    return defaultReturnValue();
                else
                    return new List();
        }
        ///  Gets header metadata type. 
        ///  The header. 
        ///  The header metadata type. 
        public static HeaderMetadata GetHeaderMetadataType(string header)
        {
            if (string.IsNullOrEmpty(header))
                return HeaderMetadata.None;
            HeaderMetadata rType;
            if (!Enum.TryParse(header, out rType))
                return HeaderMetadata.None;
            return rType;
        }
        ///  Gets report view type. 
        ///  The type. 
        ///  The report view type. 
        public static ReportViewType GetReportViewType(string rowType)
        {
            if (string.IsNullOrEmpty(rowType))
                return ReportViewType.ReportData;
            ReportViewType rType;
            if (!Enum.TryParse(rowType, out rType))
                return ReportViewType.ReportData;
            return rType;
        }
        ///  Gets row type. 
        ///  The type. 
        ///  The row type. 
        public static ReportIncludeItemTypes GetRowType(string rowType)
        {
            if (string.IsNullOrEmpty(rowType))
                return ReportIncludeItemTypes.BaseItem;
            ReportIncludeItemTypes rType;
            if (!Enum.TryParse(rowType, out rType))
                return ReportIncludeItemTypes.BaseItem;
            return rType;
        }
        ///  Gets report display type. 
        ///  Type of the display. 
        ///  The report display type. 
        public static ReportDisplayType GetReportDisplayType(string displayType)
        {
            if (string.IsNullOrEmpty(displayType))
                return ReportDisplayType.ScreenExport;
            ReportDisplayType rType;
            if (!Enum.TryParse(displayType, out rType))
                return ReportDisplayType.ScreenExport;
            return rType;
        }
        ///  Gets core localized string. 
        ///  The phrase. 
        ///  The core localized string. 
        public static string GetCoreLocalizedString(string phrase)
        {
            return BaseItem.LocalizationManager.GetLocalizedString(phrase);
        }
        #endregion
    }
}