namespace Grand.Domain.Catalog;

public static class ProductAttributeExtensions
{
    public static bool ShouldHaveValues(this ProductAttributeMapping productAttributeMapping)
    {
        if (productAttributeMapping == null)
            return false;

        if (productAttributeMapping.AttributeControlTypeId == AttributeControlType.TextBox ||
            productAttributeMapping.AttributeControlTypeId == AttributeControlType.MultilineTextbox ||
            productAttributeMapping.AttributeControlTypeId == AttributeControlType.Datepicker ||
            productAttributeMapping.AttributeControlTypeId == AttributeControlType.FileUpload)
            return false;

        return true;
    }

    public static bool ValidationRulesAllowed(this ProductAttributeMapping productAttributeMapping)
    {
        if (productAttributeMapping == null)
            return false;

        if (productAttributeMapping.AttributeControlTypeId == AttributeControlType.TextBox ||
            productAttributeMapping.AttributeControlTypeId == AttributeControlType.MultilineTextbox ||
            productAttributeMapping.AttributeControlTypeId == AttributeControlType.FileUpload)
            return true;

        return false;
    }

    public static bool CanBeUsedAsCondition(this ProductAttributeMapping productAttributeMapping)
    {
        if (productAttributeMapping == null)
            return false;

        if (productAttributeMapping.AttributeControlTypeId == AttributeControlType.ReadonlyCheckboxes ||
            productAttributeMapping.AttributeControlTypeId == AttributeControlType.TextBox ||
            productAttributeMapping.AttributeControlTypeId == AttributeControlType.MultilineTextbox ||
            productAttributeMapping.AttributeControlTypeId == AttributeControlType.Datepicker ||
            productAttributeMapping.AttributeControlTypeId == AttributeControlType.FileUpload)
            return false;

        return true;
    }

    public static bool IsNonCombinable(this ProductAttributeMapping productAttributeMapping)
    {
        if (productAttributeMapping == null)
            return false;

        if (!productAttributeMapping.Combination)
            return true;

        var result = !ShouldHaveValues(productAttributeMapping);
        return result;
    }
}