Files
Tornado3_2026Election/Tornado3_2026Election/ViewModels/CareerPromiseEditRowViewModel.cs
2026-05-13 11:21:48 +09:00

145 lines
4.2 KiB
C#

using System;
using System.Collections.Generic;
using Tornado3_2026Election.Common;
using Tornado3_2026Election.Domain;
namespace Tornado3_2026Election.ViewModels;
public sealed class CareerPromiseEditRowViewModel : ObservableObject
{
private string _districtName;
private string _candidateCode;
private string _candidateName;
private string _party;
private string _promise1;
private string _promise2;
private string _promise3;
public CareerPromiseEditRowViewModel(
string candidateCode,
string candidateName,
string party,
IReadOnlyList<string>? promises = null,
string districtName = "",
Action<CareerPromiseEditRowViewModel>? deleteAction = null)
{
_candidateCode = candidateCode ?? string.Empty;
_candidateName = candidateName ?? string.Empty;
_party = party ?? string.Empty;
_districtName = districtName ?? string.Empty;
_promise1 = GetPromise(promises, 0);
_promise2 = GetPromise(promises, 1);
_promise3 = GetPromise(promises, 2);
DeleteCommand = new RelayCommand(() => deleteAction?.Invoke(this), () => deleteAction is not null);
}
public RelayCommand DeleteCommand { get; }
public string DistrictName
{
get => _districtName;
set => SetProperty(ref _districtName, value ?? string.Empty);
}
public string CandidateCode
{
get => _candidateCode;
set => SetProperty(ref _candidateCode, value ?? string.Empty);
}
public string CandidateName
{
get => _candidateName;
set => SetProperty(ref _candidateName, value ?? string.Empty);
}
public string Party
{
get => _party;
set => SetProperty(ref _party, value ?? string.Empty);
}
public string Promise1
{
get => _promise1;
set
{
if (SetProperty(ref _promise1, value ?? string.Empty))
{
OnPropertyChanged(nameof(HasAnyPromise));
}
}
}
public string Promise2
{
get => _promise2;
set
{
if (SetProperty(ref _promise2, value ?? string.Empty))
{
OnPropertyChanged(nameof(HasAnyPromise));
}
}
}
public string Promise3
{
get => _promise3;
set
{
if (SetProperty(ref _promise3, value ?? string.Empty))
{
OnPropertyChanged(nameof(HasAnyPromise));
}
}
}
public bool HasAnyPromise =>
!string.IsNullOrWhiteSpace(Promise1) ||
!string.IsNullOrWhiteSpace(Promise2) ||
!string.IsNullOrWhiteSpace(Promise3);
public IReadOnlyList<string> Promises => new[] { Promise1, Promise2, Promise3 };
public CareerPromiseEntry? ToEntry(
string stationId,
string electionType,
string districtCode,
string districtName)
{
var normalizedCandidateCode = CandidateCode.Trim();
var normalizedCandidateName = CandidateName.Trim();
var normalizedParty = Party.Trim();
if (!HasAnyPromise ||
string.IsNullOrWhiteSpace(normalizedCandidateName) ||
string.IsNullOrWhiteSpace(normalizedParty))
{
return null;
}
var normalizedDistrictName = string.IsNullOrWhiteSpace(DistrictName)
? districtName?.Trim() ?? string.Empty
: DistrictName.Trim();
return new CareerPromiseEntry
{
StationId = stationId?.Trim() ?? string.Empty,
ElectionType = electionType?.Trim() ?? string.Empty,
DistrictCode = districtCode?.Trim() ?? string.Empty,
DistrictName = normalizedDistrictName,
CandidateCode = normalizedCandidateCode,
CandidateName = normalizedCandidateName,
Party = normalizedParty,
Promises = new[] { Promise1.Trim(), Promise2.Trim(), Promise3.Trim() }
};
}
private static string GetPromise(IReadOnlyList<string>? promises, int index)
{
return promises is not null && index >= 0 && index < promises.Count
? promises[index] ?? string.Empty
: string.Empty;
}
}