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

import org.junit.jupiter.api.Test;
import java.io.IOException;
import java.util.List;

/**
 * Team tests for the Backend teamtes for P105.CodeReview
 */
class TeamTests {

    @Test
    public void testReadDataLoadsSongs() throws IOException {
        Tree_Placeholder tree = new Tree_Placeholder();
        Backend backend = new Backend(tree);

        backend.readData("songs.csv");

        List<String> all = backend.getAndSetRange(null, null);
        assertNotNull(all);
        assertTrue(all.size() > 0, "Expected at least one song loaded from songs.csv");
    }

    @Test
    public void testGetAndSetRangeNoMatches() throws IOException {
        Tree_Placeholder tree = new Tree_Placeholder();
        Backend backend = new Backend(tree);

        backend.readData("songs.csv");

        List<String> noMatch = backend.getAndSetRange(3000, 4000);
        assertNotNull(noMatch);
        assertEquals(0, noMatch.size(), "Expected no songs in year range 3000–4000");
    }

    @Test
    public void testFilterAndFiveMostBasics() throws IOException {
        Tree_Placeholder tree = new Tree_Placeholder();
        Backend backend = new Backend(tree);

        backend.readData("songs.csv");

        List<String> before = backend.getAndSetRange(null, null);

        // applying null filter should return the same current list
        List<String> afterClear = backend.applyAndSetFilter(null);
        assertEquals(before, afterClear, "applyAndSetFilter(null) should not change the list");

        List<String> top5 = backend.fiveMost();
        assertNotNull(top5);
        assertTrue(top5.size() <= 5, "fiveMost() should return at most 5 songs");
    }
}
