States.java

// Copyright (c) 2023 Tobias Briones. All rights reserved.
// SPDX-License-Identifier: BSD-3-Clause
// This file is part of https://github.com/tobiasbriones/blog

package engineer.mathsoftware.blog.slides.drawing.ai;

import javafx.geometry.BoundingBox;

import java.util.Optional;

final class States {
    static class WordSelectionState implements Stateful<BoundingBox, AIShape.State> {
        private BoundingBox shape;
        private AIShape.State state;

        @Override
        public void set(BoundingBox newShape, AIShape.State newState) {
            if (newState == AIShape.State.Normal) {
                unset();
                return;
            }
            shape = newShape;
            state = newState;
        }

        private void unset() {
            shape = null;
            state = null;
        }

        public Optional<Focus<BoundingBox, AIShape.State>> get() {
            return shape != null && state != null
                ? Optional.of(new Focus<>(shape, state))
                : Optional.empty();
        }
    }

    private States() {}
}