using Connected.Extensions;
using Connected.Utilities;
using Microsoft.AspNetCore.Components;
namespace Connected.Components;
public partial class InputControl : UIComponent
{
	protected string Classname =>
		new CssBuilder("mud-input-control")
		 .AddClass("mud-input-required", when: () => Required)
		 .AddClass($"mud-input-control-margin-{Margin.ToDescriptionString()}", when: () => Margin != Margin.None)
		 .AddClass("mud-input-control-full-width", FullWidth)
		 .AddClass("mud-input-error", Error)
		 .AddClass(Class)
		.Build();
	protected string HelperContainer =>
		new CssBuilder("mud-input-control-helper-container")
		.AddClass($"px-1", Variant == Variant.Filled)
		.AddClass($"px-2", Variant == Variant.Outlined)
		.Build();
	protected string HelperClass =>
		new CssBuilder("mud-input-helper-text")
		 .AddClass("mud-input-helper-onfocus", HelperTextOnFocus)
		 .AddClass("mud-input-error", Error)
		.Build();
	/// 
	/// Child content of component.
	/// 
	[Parameter] public RenderFragment ChildContent { get; set; }
	/// 
	/// Should be the Input
	/// 
	[Parameter] public RenderFragment InputContent { get; set; }
	/// 
	///  Will adjust vertical spacing. 
	/// 
	[Parameter] public Margin Margin { get; set; } = Margin.None;
	/// 
	/// If true, will apply mud-input-required class to the output div
	/// 
	[Parameter] public bool Required { get; set; }
	/// 
	/// If true, the label will be displayed in an error state.
	/// 
	[Parameter] public bool Error { get; set; }
	/// 
	/// The ErrorText that will be displayed if Error true
	/// 
	[Parameter] public string ErrorText { get; set; }
	/// 
	/// The ErrorId that will be used by aria-describedby if Error true
	/// 
	[Parameter] public string ErrorId { get; set; }
	/// 
	/// The HelperText will be displayed below the text field.
	/// 
	[Parameter] public string HelperText { get; set; }
	/// 
	/// If true, the helper text will only be visible on focus.
	/// 
	[Parameter] public bool HelperTextOnFocus { get; set; }
	/// 
	/// The current character counter, displayed below the text field.
	/// 
	[Parameter] public string CounterText { get; set; }
	/// 
	/// If true, the input will take up the full width of its container.
	/// 
	[Parameter] public bool FullWidth { get; set; }
	/// 
	/// If string has value the label text will be displayed in the input, and scaled down at the top if the input has value.
	/// 
	[Parameter] public string Label { get; set; }
	/// 
	/// Variant can be Text, Filled or Outlined.
	/// 
	[Parameter] public Variant Variant { get; set; } = Variant.Text;
	/// 
	/// If true, the input element will be disabled.
	/// 
	[Parameter] public bool Disabled { get; set; }
	/// 
	/// If string has value the label "for" attribute will be added.
	/// 
	[Parameter] public string ForId { get; set; } = string.Empty;
}