package org.jtwig.render.expression.calculator.enumerated;

import com.google.common.base.Optional;
import org.jtwig.render.RenderRequest;
import org.jtwig.value.convert.Converter;

import java.util.ArrayList;
import java.util.List;

public class CharDescendingOrderEnumerationListStrategy implements EnumerationListStrategy {
    @Override
    public Optional<List<Object>> enumerate(RenderRequest request, Object left, Object right) {
        Converter.Result<Character> leftChar = request.getEnvironment().getValueEnvironment().getCharConverter().convert(left);
        Converter.Result<Character> rightChar = request.getEnvironment().getValueEnvironment().getCharConverter().convert(right);
        if (leftChar.isDefined() && rightChar.isDefined()) {
            Character start = leftChar.get();
            Character end = rightChar.get();
            if (start >= end) {
                List<Object> result = new ArrayList<>();
                while (start > end) {
                    result.add(start);
                    start--;
                }
                result.add(start);
                return Optional.of(result);
            }
        }
        return Optional.absent();
    }
}
