using Microsoft.AspNetCore.Components; using Microsoft.AspNetCore.Components.Web; using Microsoft.EntityFrameworkCore.Metadata.Internal; using Portfolio.Application.Services.PokemonService; using Portfolio.Domain.Features.Pokemon; namespace Portfolio.WebUI.Server.Components.Component.Pokemon_Components { public partial class PokemonAddForm { [Parameter] public EventCallback OnPokemonReady { get; set; } [Parameter] public EventCallback RemoveForm { get; set; } [Parameter] public bool mostRecentForm { get; set; } protected static readonly string[] PokemonTypes = new[] { "Grass","Fire","Water","Normal","Flying","Bug","Poison","Electric","Ground","Rock","Ice", "Steel","Fighting","Psychic","Dark","Fairy","Ghost","Dragon" }; protected static readonly string[] SleepTypes = new[] { "Dozing", "Snoozing", "Slumbering" }; protected static readonly string[] Specialities = new[] { "Berries", "Ingredients", "Skills", "All" }; private bool HideLabel { get; set; } = true; private bool showErrors { get; set; } = false; private Pokemon NewPokemon = new Pokemon { PokemonId = 0, // Or any default ID logic PokemonName = string.Empty, // Required fields cannot be null SleepType = string.Empty, Speciality = string.Empty, IsVariation = false }; private void Toggle() => HideLabel = !HideLabel; private string GetRoundingClass() { if (!HideLabel) { return "rounded-start"; } return "rounded-start rounded-end"; } // Minimal "complete" check (no data annotations needed) private bool IsComplete => NewPokemon.PokemonId > 0 && !string.IsNullOrWhiteSpace(NewPokemon.PokemonName) && !string.IsNullOrWhiteSpace(NewPokemon.PokemonType) && !string.IsNullOrWhiteSpace(NewPokemon.SleepType) && !string.IsNullOrWhiteSpace(NewPokemon.Speciality) && (!NewPokemon.IsVariation || !string.IsNullOrWhiteSpace(NewPokemon.VariationName)); private IEnumerable MissingFields() { if (NewPokemon.PokemonId <= 0) yield return "Pokédex #"; if (string.IsNullOrWhiteSpace(NewPokemon.PokemonName)) yield return "Name"; if (string.IsNullOrWhiteSpace(NewPokemon.PokemonType)) yield return "Type"; if (string.IsNullOrWhiteSpace(NewPokemon.SleepType)) yield return "Sleep Type"; if (string.IsNullOrWhiteSpace(NewPokemon.Speciality)) yield return "Specialty"; if (NewPokemon.IsVariation && string.IsNullOrWhiteSpace(NewPokemon.VariationName)) yield return "Variation Name"; } private async Task HandleRemove() { await RemoveForm.InvokeAsync(); } private async Task SendPokemon() { if (!IsComplete) { showErrors = true; StateHasChanged(); return; } // Optionally send a copy to avoid later mutation by the child var copy = new Pokemon { PokemonId = NewPokemon.PokemonId, PokemonName = NewPokemon.PokemonName, PokemonType = NewPokemon.PokemonType, SleepType = NewPokemon.SleepType, Speciality = NewPokemon.Speciality, IsVariation = NewPokemon.IsVariation, VariationName = NewPokemon.VariationName, PokemonImageUrl = NewPokemon.PokemonImageUrl, PokemonShinyImageUrl = NewPokemon.PokemonShinyImageUrl, FlavorText = NewPokemon.FlavorText }; await OnPokemonReady.InvokeAsync(copy); } } }