using Beam.Abstractions;

namespace Beam.Models {
    public class State(string[] state) : IState {
        string[] state = state;
        
        public string[] GetState() => state;

        public void SetState(string[] state) => this.state = state;

        public IReadOnlyState AsReadOnly() => new ImmutableState(this.state);
        
        public State Copy()
            => new((string[])state.Clone());
        
        IState IState.Copy() 
            => Copy();

        public static implicit operator ImmutableState(State state) => new ImmutableState(state.GetState());
        
        public string this[Index i] {
            get => state[i];
            set => state[i] = value;
        } 
    }
}
