@using AIStudio.Settings.DataModel
@inherits MSGComponentBase

<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="@T("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">
                @T("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="@T("Selected base directory for this data source")" DirectoryDialogTitle="@T("Select the base directory")" Validation="@this.dataSourceValidation.ValidatePath" />

            <MudJustifiedText Typo="Typo.body1" Class="mb-3">
                @T("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="@T("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))
                        {
                            @T("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
                        {
                            @string.Format(T("Please note: the embedding you selected runs in the cloud. All your data from the folder '{0}' and all its subdirectories will be sent to the cloud. Please confirm that you have read and understood this."), this.dataPath)
                        }
                    </MudJustifiedText>
                    <MudTextSwitch @bind-Value="@this.dataUserAcknowledgedCloudEmbedding" Label="@T("I confirm that I have read and understood the above")" LabelOn="@T("Yes, please send my data to the cloud")" LabelOff="@T("No, I will chose another embedding")" Validation="@this.dataSourceValidation.ValidateUserAcknowledgedCloudEmbedding"/>
                }
                else
                {
                    <MudJustifiedText Typo="Typo.body1" Color="Color.Tertiary" Class="mb-3">
                        @T("The embedding you selected runs locally or in your organization. Your data is not sent to the cloud.")
                    </MudJustifiedText>
                }
            }
            
            <ManagePandocDependency IntroText="@T("For some data types, such as Office files, MindWork AI Studio requires the open-source application Pandoc.")"/>

            <MudSelect @bind-Value="@this.dataSecurityPolicy" Text="@this.dataSecurityPolicy.ToSelectionText()" Label="@T("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>
            
            <MudNumericField T="ushort" Min="10" @bind-Value="@this.dataMaxMatches" Label="@T("How many matches do you want at most per query?")" Variant="Variant.Outlined" Step="10" />
        </MudForm>
        <Issues IssuesData="@this.dataIssues"/>
    </DialogContent>
    <DialogActions>
        <MudButton OnClick="@this.Cancel" Variant="Variant.Filled">
            @T("Cancel")
        </MudButton>
        <MudButton OnClick="@this.Store" Variant="Variant.Filled" Color="Color.Primary">
            @if(this.IsEditing)
            {
                @T("Update")
            }
            else
            {
                @T("Add")
            }
        </MudButton>
    </DialogActions>
</MudDialog>