001/*
002 *     Copyright 2021 Siroshun09
003 *
004 *     Licensed under the Apache License, Version 2.0 (the "License");
005 *     you may not use this file except in compliance with the License.
006 *     You may obtain a copy of the License at
007 *
008 *         http://www.apache.org/licenses/LICENSE-2.0
009 *
010 *     Unless required by applicable law or agreed to in writing, software
011 *     distributed under the License is distributed on an "AS IS" BASIS,
012 *     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 *     See the License for the specific language governing permissions and
014 *     limitations under the License.
015 */
016
017package com.github.siroshun09.mcmessage.placeholder;
018
019import com.github.siroshun09.mcmessage.message.Message;
020import net.kyori.adventure.text.Component;
021import net.kyori.adventure.text.TextReplacementConfig;
022import org.jetbrains.annotations.Contract;
023import org.jetbrains.annotations.NotNull;
024
025import java.util.Objects;
026import java.util.function.Supplier;
027
028public interface Placeholder {
029
030    @NotNull String getPlaceholder();
031
032    @Contract("_ -> new")
033    default @NotNull TextReplacementConfig toTextReplacementConfig(@NotNull String replacement) {
034        return Objects.requireNonNull(replacement).isEmpty()
035                ? toTextReplacementConfig(Component.empty())
036                : toTextReplacementConfig(Component.text(replacement));
037    }
038
039    @Contract("_ -> new")
040    default @NotNull TextReplacementConfig toTextReplacementConfig(@NotNull Message message) {
041        Objects.requireNonNull(message);
042
043        return toTextReplacementConfig(message.toTextComponent());
044    }
045
046    @Contract("_ -> new")
047    default @NotNull TextReplacementConfig toTextReplacementConfig(@NotNull Component replacement) {
048        Objects.requireNonNull(replacement);
049
050        return TextReplacementConfig.builder()
051                .matchLiteral(getPlaceholder())
052                .replacement(replacement)
053                .build();
054    }
055}