using Grand.Domain.Catalog;
using Grand.Domain.Common;
using Grand.Infrastructure.ModelBinding;
using Grand.Infrastructure.Models;
using Grand.Web.Common.Binders;
using Grand.Web.Common.Models;
using Microsoft.AspNetCore.Mvc;

namespace Grand.Web.Models.Contact
{
    public class ContactUsModel : BaseModel
    {
        [GrandResourceDisplayName("ContactUs.Email")]
        public string Email { get; set; }
        [GrandResourceDisplayName("ContactUs.Subject")]
        public string Subject { get; set; }
        public bool SubjectEnabled { get; set; }
        [GrandResourceDisplayName("ContactUs.Enquiry")]
        public string Enquiry { get; set; }
        [GrandResourceDisplayName("ContactUs.FullName")]
        public string FullName { get; set; }
        public bool SuccessfullySent { get; set; }
        public string Result { get; set; }
        public bool DisplayCaptcha { get; set; }
        public ICaptchaValidModel Captcha { get; set; } = new CaptchaModel();

        [ModelBinder(BinderType = typeof(CustomAttributesBinder))]
        public IList<CustomAttributeModel> Attributes { get; set; } = new List<CustomAttributeModel>();

        public string ContactAttributeInfo { get; set; }
        public IList<CustomAttribute> ContactAttribute { get; set; } = new List<CustomAttribute>();
        public IList<ContactAttributeModel> ContactAttributes { get; set; } = new List<ContactAttributeModel>();

        public class ContactAttributeModel : BaseEntityModel
        {
            public string Name { get; set; }
            public string DefaultValue { get; set; }
            public string TextPrompt { get; set; }
            public bool IsRequired { get; set; }
            /// <summary>
            /// Selected day value for datepicker
            /// </summary>
            public int? SelectedDay { get; set; }
            /// <summary>
            /// Selected month value for datepicker
            /// </summary>
            public int? SelectedMonth { get; set; }
            /// <summary>
            /// Selected year value for datepicker
            /// </summary>
            public int? SelectedYear { get; set; }
            /// <summary>
            /// Allowed file extensions for customer uploaded files
            /// </summary>
            public IList<string> AllowedFileExtensions { get; set; } = new List<string>();

            public AttributeControlType AttributeControlType { get; set; }
            public IList<ContactAttributeValueModel> Values { get; set; } = new List<ContactAttributeValueModel>();
        }

        public class ContactAttributeValueModel : BaseEntityModel
        {
            public string Name { get; set; }
            public int DisplayOrder { get; set; }
            public string ColorSquaresRgb { get; set; }
            public bool IsPreSelected { get; set; }
        }
    }
}