using Grand.Domain.Localization;

namespace Grand.Domain.Stores
{
    /// <summary>
    /// Represents a store
    /// </summary>
    public class Store : BaseEntity, ITranslationEntity
    {
        /// <summary>
        /// Gets or sets the store name
        /// </summary>
        public string Name { get; set; }

        /// <summary>
        /// Gets or sets the store shortcut
        /// </summary>
        public string Shortcut { get; set; }
        
        /// <summary>
        /// Gets or sets the store URL
        /// </summary>
        public string Url { get; set; }

        /// <summary>
        /// Gets or sets a value indicating whether SSL is enabled
        /// </summary>
        public bool SslEnabled { get; set; }

        /// <summary>
        /// Gets or sets the store secure URL (HTTPS)
        /// </summary>
        public string SecureUrl { get; set; }

        /// <summary>
        /// Gets or sets the list of domains
        /// </summary>
        public IList<DomainHost> Domains { get; set; } = new List<DomainHost>();

        /// <summary>
        /// Gets or sets the identifier of the default language for this store; "" is set when we use the default language display order
        /// </summary>
        public string DefaultLanguageId { get; set; }

        /// <summary>
        /// Gets or sets the identifier of the default waregouse for this store
        /// </summary>
        public string DefaultWarehouseId { get; set; }

        /// <summary>
        /// Gets or sets the identifier of the default country for this store
        /// </summary>
        public string DefaultCountryId { get; set; }

        /// <summary>
        /// Gets or sets the identifier of the default currency for this store
        /// </summary>
        public string DefaultCurrencyId { get; set; }

        /// <summary>
        /// Gets or sets the display order
        /// </summary>
        public int DisplayOrder { get; set; }

        /// <summary>
        /// Gets or sets the company name
        /// </summary>
        public string CompanyName { get; set; }

        /// <summary>
        /// Gets or sets the company registration number
        /// </summary>
        public string CompanyRegNo { get; set; }

        /// <summary>
        /// Gets or sets the company address
        /// </summary>
        public string CompanyAddress { get; set; }

        /// <summary>
        /// Gets or sets the store phone number
        /// </summary>
        public string CompanyPhoneNumber { get; set; }

        /// <summary>
        /// Gets or sets the company VAT (used in Europe Union countries)
        /// </summary>
        public string CompanyVat { get; set; }

        /// <summary>
        /// Gets or sets the company email
        /// </summary>
        public string CompanyEmail { get; set; }

        /// <summary>
        /// Gets or sets the company opening hours
        /// </summary>
        public string CompanyHours { get; set; }


        public BankAccount BankAccount { get; set; } = new();

        /// <summary>
        /// Gets or sets the collection of locales
        /// </summary>
        public IList<TranslationEntity> Locales { get; set; } = new List<TranslationEntity>();
    }
}
