@page "/admin/data-connections/create" @page "/admin/data-connections/{Id:int}/edit" @using ScadaLink.Security @using ScadaLink.Commons.Entities.Sites @using ScadaLink.Commons.Interfaces.Repositories @attribute [Authorize(Policy = AuthorizationPolicies.RequireAdmin)] @inject ISiteRepository SiteRepository @inject NavigationManager NavigationManager

@(Id.HasValue ? "Edit Data Connection" : "Add Data Connection")

@if (_loading) { } else {
@if (Id.HasValue) {
} else {
}
@if (_formError != null) {
@_formError
}
}
@code { [Parameter] public int? Id { get; set; } private bool _loading = true; private DataConnection? _editingConnection; private List _sites = new(); private int _formSiteId; private string _siteName = string.Empty; private string _formName = string.Empty; private string _formProtocol = string.Empty; private string? _formConfiguration; private string? _formError; protected override async Task OnInitializedAsync() { _sites = (await SiteRepository.GetAllSitesAsync()).ToList(); if (Id.HasValue) { try { _editingConnection = await SiteRepository.GetDataConnectionByIdAsync(Id.Value); if (_editingConnection != null) { _formSiteId = _editingConnection.SiteId; _siteName = _sites.FirstOrDefault(s => s.Id == _formSiteId)?.Name ?? $"Site {_formSiteId}"; _formName = _editingConnection.Name; _formProtocol = _editingConnection.Protocol; _formConfiguration = _editingConnection.PrimaryConfiguration; } } catch (Exception ex) { _formError = $"Failed to load connection: {ex.Message}"; } } _loading = false; } private async Task SaveConnection() { _formError = null; if (_formSiteId == 0) { _formError = "Site is required."; return; } if (string.IsNullOrWhiteSpace(_formName)) { _formError = "Name is required."; return; } if (string.IsNullOrWhiteSpace(_formProtocol)) { _formError = "Protocol is required."; return; } try { if (_editingConnection != null) { _editingConnection.Name = _formName.Trim(); _editingConnection.Protocol = _formProtocol; _editingConnection.PrimaryConfiguration = _formConfiguration?.Trim(); await SiteRepository.UpdateDataConnectionAsync(_editingConnection); } else { var conn = new DataConnection(_formName.Trim(), _formProtocol, _formSiteId) { PrimaryConfiguration = _formConfiguration?.Trim() }; await SiteRepository.AddDataConnectionAsync(conn); } await SiteRepository.SaveChangesAsync(); NavigationManager.NavigateTo("/admin/data-connections"); } catch (Exception ex) { _formError = $"Save failed: {ex.Message}"; } } private void GoBack() { NavigationManager.NavigateTo("/admin/data-connections"); } }