﻿using System;
using BugseePlugin.Internals;

namespace BugseePlugin.Internals
{
    internal sealed class BugseeReportAppearance : AppearanceBase, IBugseeReportAppearance
    {
        private BugseeAppearance baseAppearance;

        internal BugseeReportAppearance(BugseeAppearance baseAppearance, Func<BugseeAppearanceProperties, AppearanceValue, AppearanceValue> getSetHandler) : base(getSetHandler)
        {
            this.baseAppearance = baseAppearance;
        }


        #region Common

        /// <summary>
        /// Color of the label with version number in Report UI
        /// </summary>
        /// <value>The color of the version.</value>
        public IBugseeColor VersionColor
        {
            get => g(BugseeAppearanceProperties.ReportVersionColor).Color;
            set => s(BugseeAppearanceProperties.ReportVersionColor, AppearanceValue.Create(value, null));
        }

        /// <summary>
        /// Color of the text displayed in Report UI
        /// </summary>
        /// <value>The color of the text.</value>
        public IBugseeColor TextColor
        {
            get => g(BugseeAppearanceProperties.ReportTextColor).Color;
            set => s(BugseeAppearanceProperties.ReportTextColor, AppearanceValue.Create(value, null));
        }

        /// <summary>
        /// Background color of the Report UI
        /// </summary>
        /// <value>The color of the background.</value>
        public IBugseeColor BackgroundColor
        {
            get => g(BugseeAppearanceProperties.ReportBackgroundColor).Color;
            set => s(BugseeAppearanceProperties.ReportBackgroundColor, AppearanceValue.Create(value, null));
        }

        #endregion

        #region iOS

        /// <summary>
        /// iOS: UITableView cells background color
        /// </summary>
        /// <value>The color of the cell background.</value>
        public IBugseeColor CellBackgroundColor
        {
            get => g(BugseeAppearanceProperties.ReportCellBackgroundColor).Color;
            set => s(BugseeAppearanceProperties.ReportCellBackgroundColor, AppearanceValue.Create(value, null));
        }

        /// <summary>
        /// iOS: Send UIButton text color
        /// </summary>
        /// <value>The color of the send button.</value>
        public IBugseeColor SendButtonColor
        {
            get => g(BugseeAppearanceProperties.ReportSendButtonColor).Color;
            set => s(BugseeAppearanceProperties.ReportSendButtonColor, AppearanceValue.Create(value, null));
        }

        /// <summary>
        /// iOS: UIInputFields placeholder color
        /// </summary>
        /// <value>The color of the placeholder.</value>
        public IBugseeColor PlaceholderColor
        {
            get => g(BugseeAppearanceProperties.ReportPlaceholderColor).Color;
            set => s(BugseeAppearanceProperties.ReportPlaceholderColor, AppearanceValue.Create(value, null));
        }

        /// <summary>
        /// iOS: UINavigation bar background color
        /// </summary>
        /// <value>The color of the navigation bar.</value>
        public IBugseeColor NavigationBarColor
        {
            get => g(BugseeAppearanceProperties.ReportNavigationBarColor).Color;
            set => s(BugseeAppearanceProperties.ReportNavigationBarColor, AppearanceValue.Create(value, null));
        }

        /// <summary>
        /// Close UIButton color
        /// </summary>
        /// <value>The color of the close button.</value>
        public IBugseeColor CloseButtonColor
        {
            get => g(BugseeAppearanceProperties.ReportCloseButtonColor).Color;
            set => s(BugseeAppearanceProperties.ReportCloseButtonColor, AppearanceValue.Create(value, null));
        }

        #endregion

        #region Android

        /// <summary>
        /// Android: Action bar background color in Report UI
        /// </summary>
        /// <value>The color of the action bar.</value>
        public IBugseeColor ActionBarColor
        {
            get => g(BugseeAppearanceProperties.ReportActionBarColor).Color;
            set => s(BugseeAppearanceProperties.ReportActionBarColor, AppearanceValue.Create(value, null));
        }

        /// <summary>
        /// Android: Action bar buttons text color in Report UI
        /// </summary>
        /// <value>The color of the action bar text.</value>
        public IBugseeColor ActionBarTextColor
        {
            get => g(BugseeAppearanceProperties.ReportActionBarTextColor).Color;
            set => s(BugseeAppearanceProperties.ReportActionBarTextColor, AppearanceValue.Create(value, null));
        }

        /// <summary>
        /// Android: Action bar buttons background color in clicked state in Report UI
        /// </summary>
        /// <value>The color of the action bar button background clicked.</value>
        public IBugseeColor ActionBarButtonBackgroundClickedColor
        {
            get => g(BugseeAppearanceProperties.ReportActionBarButtonBackgroundClickedColor).Color;
            set => s(BugseeAppearanceProperties.ReportActionBarButtonBackgroundClickedColor, AppearanceValue.Create(value, null));
        }

        /// <summary>
        /// Android: EditTexts background color in Report UI
        /// </summary>
        /// <value>The color of the edit text background.</value>
        public IBugseeColor EditTextBackgroundColor
        {
            get => g(BugseeAppearanceProperties.ReportEditTextBackgroundColor).Color;
            set => s(BugseeAppearanceProperties.ReportEditTextBackgroundColor, AppearanceValue.Create(value, null));
        }

        /// <summary>
        /// Android: EditTexts hint text color in Report UI
        /// </summary>
        /// <value>The color of the hint.</value>
        public IBugseeColor HintColor
        {
            get => g(BugseeAppearanceProperties.ReportHintColor).Color;
            set => s(BugseeAppearanceProperties.ReportHintColor, AppearanceValue.Create(value, null));
        }

        /// <summary>
        /// Android: Issue severity label text color in active state in Report UI
        /// </summary>
        /// <value>The color of the severity label active.</value>
        public IBugseeColor SeverityLabelActiveColor
        {
            get => g(BugseeAppearanceProperties.ReportSeverityLabelActiveColor).Color;
            set => s(BugseeAppearanceProperties.ReportSeverityLabelActiveColor, AppearanceValue.Create(value, null));
        }

        /// <summary>
        /// 
        /// </summary>
        public string SummaryPlaceholder {
            get => g(BugseeAppearanceProperties.ReportSummaryPlaceholder).String;
            set => s(BugseeAppearanceProperties.ReportSummaryPlaceholder, AppearanceValue.Create(null, value));
        }

        /// <summary>
        /// 
        /// </summary>
        public string DescriptionPlaceholder {
            get => g(BugseeAppearanceProperties.ReportDescriptionPlaceholder).String;
            set => s(BugseeAppearanceProperties.ReportDescriptionPlaceholder, AppearanceValue.Create(null, value));
        }

        /// <summary>
        /// 
        /// </summary>
        public string LabelsPlaceholder {
            get => g(BugseeAppearanceProperties.ReportLabelsPlaceholder).String;
            set => s(BugseeAppearanceProperties.ReportLabelsPlaceholder, AppearanceValue.Create(null, value));
        }

        /// <summary>
        /// 
        /// </summary>
        public string EmailPlaceholder {
            get => g(BugseeAppearanceProperties.ReportEmailPlaceholder).String;
            set => s(BugseeAppearanceProperties.ReportEmailPlaceholder, AppearanceValue.Create(null, value));
        }

        #endregion
    }
}
