@using AIStudio.Settings.DataModel

<MudDialog>
    <DialogContent>
        <MudForm @ref="@this.form" @bind-IsValid="@this.dataIsValid" @bind-Errors="@this.dataIssues">
            @* ReSharper disable once CSharpWarnings::CS8974 *@
            <MudTextField
                T="string"
                @bind-Text="@this.dataName"
                Label="Data Source Name"
                Class="mb-6"
                MaxLength="40"
                Counter="40"
                Immediate="@true"
                Validation="@this.dataSourceValidation.ValidatingName"
                Adornment="Adornment.Start"
                AdornmentIcon="@Icons.Material.Filled.Lightbulb"
                AdornmentColor="Color.Info"
                UserAttributes="@SPELLCHECK_ATTRIBUTES"
            />

            <MudJustifiedText Typo="Typo.body1" Class="mb-3">
                Select a root directory for this data source. All data in this directory and all
                its subdirectories will be processed for this data source.
            </MudJustifiedText>
            <SelectDirectory @bind-Directory="@this.dataPath" Label="Selected base directory for this data source" DirectoryDialogTitle="Select the base directory" Validation="@this.dataSourceValidation.ValidatePath" />

            <MudJustifiedText Typo="Typo.body1" Class="mb-3">
                In order for the AI to be able to determine the appropriate data at any time, you must
                choose an embedding method.
            </MudJustifiedText>
            <MudSelect @bind-Value="@this.dataEmbeddingId" Label="Embedding" Class="mb-3" OpenIcon="@Icons.Material.Filled.ExpandMore" AdornmentColor="Color.Info" Adornment="Adornment.Start" Validation="@this.dataSourceValidation.ValidateEmbeddingId">
                @foreach (var embedding in this.AvailableEmbeddings)
                {
                    <MudSelectItem Value="@embedding.Value">@embedding.Name</MudSelectItem>
                }
            </MudSelect>
            
            @if (!string.IsNullOrWhiteSpace(this.dataEmbeddingId))
            {
                if (this.SelectedCloudEmbedding)
                {
                    <MudJustifiedText Typo="Typo.body1" Color="Color.Error" Class="mb-3">
                        @if (string.IsNullOrWhiteSpace(this.dataPath))
                        {
                            @: Please note: the embedding you selected runs in the cloud. All your data will be sent to the cloud.
                            @: Please confirm that you have read and understood this.
                        }
                        else
                        {
                            @: Please note: the embedding you selected runs in the cloud. All your data from the
                            @: folder '@this.dataPath' and all its subdirectories will be sent to the cloud. Please
                            @: confirm that you have read and understood this.
                        }
                    </MudJustifiedText>
                    <MudTextSwitch @bind-Value="@this.dataUserAcknowledgedCloudEmbedding" Label="I confirm that I have read and understood the above" LabelOn="Yes, please send my data to the cloud" LabelOff="No, I will chose another embedding" Validation="@this.dataSourceValidation.ValidateUserAcknowledgedCloudEmbedding"/>
                }
                else
                {
                    <MudJustifiedText Typo="Typo.body1" Color="Color.Tertiary" Class="mb-3">
                        The embedding you selected runs locally or in your organization. Your data is not sent to the cloud.
                    </MudJustifiedText>
                }
            }

            <MudSelect @bind-Value="@this.dataSecurityPolicy" Text="@this.dataSecurityPolicy.ToSelectionText()" Label="Your security policy" Class="mb-3" OpenIcon="@Icons.Material.Filled.ExpandMore" AdornmentColor="Color.Info" Adornment="Adornment.Start" Validation="@this.dataSourceValidation.ValidateSecurityPolicy">
                @foreach (var policy in Enum.GetValues<DataSourceSecurity>())
                {
                    <MudSelectItem Value="@policy">@policy.ToSelectionText()</MudSelectItem>
                }
            </MudSelect>
        </MudForm>
        <Issues IssuesData="@this.dataIssues"/>
    </DialogContent>
    <DialogActions>
        <MudButton OnClick="@this.Cancel" Variant="Variant.Filled">Cancel</MudButton>
        <MudButton OnClick="@this.Store" Variant="Variant.Filled" Color="Color.Primary">
            @if(this.IsEditing)
            {
                @:Update
            }
            else
            {
                @:Add
            }
        </MudButton>
    </DialogActions>
</MudDialog>