using static AgroBase.Models.Enums; namespace OperationControl.Mapas.Creation { /// /// Estado transitório da criação de mapa. /// Não altera o Workspace até o operador explicitamente concluir. /// public sealed class MapaEstadoCriacao { private readonly List _ruas = new(); public bool EmCriacao { get; internal set; } public string Nome { get; internal set; } = string.Empty; public TipoMapaOperacao Tipo { get; internal set; } = TipoMapaOperacao.Indefinido; public MapaModoCapturaCriacao ModoCaptura { get; internal set; } = MapaModoCapturaCriacao.Manual; public bool GravacaoAutomaticaAtiva { get; internal set; } public double DistanciaMinimaCapturaAutomaticaMetros { get; internal set; } = 0.50; public int IndiceRuaAtual { get; internal set; } public IReadOnlyList Ruas => _ruas; internal List RuasMutaveis => _ruas; public int QuantidadeRuas => _ruas.Count; public int QuantidadeRuasValidas => _ruas.Count(x => x != null && x.Valida); public int QuantidadePontosTotal => _ruas.Sum(x => x?.QuantidadePontos ?? 0); public MapaRuaCriacao? RuaAtual { get { if (IndiceRuaAtual < 0 || IndiceRuaAtual >= _ruas.Count) return null; return _ruas[IndiceRuaAtual]; } } public bool PodeCriarNovaRua => EmCriacao && !GravacaoAutomaticaAtiva && RuaAtual?.Valida == true; public bool PodeSalvar => EmCriacao && !GravacaoAutomaticaAtiva && _ruas.Count > 0 && _ruas.All(x => x != null && x.Valida); internal void Limpar() { _ruas.Clear(); EmCriacao = false; Nome = string.Empty; Tipo = TipoMapaOperacao.Indefinido; ModoCaptura = MapaModoCapturaCriacao.Manual; GravacaoAutomaticaAtiva = false; DistanciaMinimaCapturaAutomaticaMetros = 0.50; IndiceRuaAtual = 0; } } }