// Copyright 2015 The Vanadium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package io.v.todos.persistence.syncbase;

import com.google.common.collect.Range;

public final class IdAlphabets {
    private IdAlphabets() {
    }

    public static final IdAlphabet
            COLLECTION_ID = fromDigitMappings(
            DigitMappings.fromRangeSet(
                    Range.closed('0', '9'),
                    Range.closed('A', 'Z'),
                    Range.singleton('_'),
                    Range.closed('a', 'z')),
            DigitMappings.fromRangeSet(
                    Range.closed('A', 'Z'),
                    Range.closed('a', 'z'))),
            ROW_NAME = fromDigitMapping(DigitMappings.ALL);

    public static IdAlphabet fromDigitMapping(final DigitMapping digitMapping) {
        return fromDigitMappings(digitMapping, digitMapping);
    }

    public static IdAlphabet fromDigitMappings(final DigitMapping digitMapping,
                                               final DigitMapping leadingDigitMapping) {
        return new IdAlphabet() {
            @Override
            public char encodeDigit(int digit) {
                return digitMapping.encode(digit);
            }

            @Override
            public int decodeDigit(char encoded) {
                return digitMapping.decode(encoded);
            }

            @Override
            public char encodeLeadingDigit(int digit) {
                return leadingDigitMapping.encode(digit);
            }

            @Override
            public int decodeLeadingDigit(char encoded) {
                return leadingDigitMapping.decode(encoded);
            }

            @Override
            public int radix() {
                return digitMapping.radix();
            }

            @Override
            public int leadingRadix() {
                return leadingDigitMapping.radix();
            }
        };
    }
}
