package pl.betoncraft.betonquest.utils;

import org.bukkit.plugin.java.JavaPlugin;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mockito;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.api.support.membermodification.MemberMatcher;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
import pl.betoncraft.betonquest.BetonQuest;
import pl.betoncraft.betonquest.config.Config;

import java.util.ArrayList;
import java.util.List;
import java.util.logging.Logger;

import static org.junit.jupiter.api.Assertions.*;

@RunWith(PowerMockRunner.class)
@PrepareForTest({Config.class, LogUtils.class, BetonQuest.class,})
public class UtilsTest {
    @Before
    public void setUp() {
        PowerMockito.mockStatic(BetonQuest.class);
        BetonQuest betonQuestInstance = Mockito.mock(BetonQuest.class);
        PowerMockito.suppress(MemberMatcher.methodsDeclaredIn(JavaPlugin.class));
        PowerMockito.when(BetonQuest.getInstance()).thenReturn(betonQuestInstance);
        PowerMockito.mockStatic(LogUtils.class);
        PowerMockito.when(LogUtils.getLogger()).thenReturn(Logger.getGlobal());
        PowerMockito.mockStatic(Config.class);
        PowerMockito.when(Config.getString("config.journal.lines_per_page")).thenReturn("13");
        PowerMockito.when(Config.getString("config.journal.chars_per_line")).thenReturn("19");

    }

    @Test
    public void testPagesFromString() {
        String journalText = "&aActive Quest: &aFlint &1wants you to visit the Farm located at 191, 23, -167!";

        List<String> journalTextFormatted = new ArrayList<>();
        journalTextFormatted.add("&aActive Quest: &aFlint\n" + "&1wants you to visit\n" + "the Farm located at\n" + "191, 23, -167!\n");

        List<String> journal = Utils.pagesFromString(journalText);
        assertEquals(journalTextFormatted, journal);
    }
}