import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertThrows;

import org.junit.jupiter.api.Test;

// Pruebas públicas de P1 para Soles. No las modifiquen.
class P1SolesPublicTest {

    @Test
    void formatsCentsAsSoles() {
        assertEquals("S/ 4.50", Soles.format(450));
        assertEquals("S/ 0.05", Soles.format(5));
        assertEquals("S/ 0.00", Soles.format(0));
        assertEquals("S/ 1234.56", Soles.format(123_456));
    }

    @Test
    void formatRejectsNegativeAmounts() {
        assertThrows(IllegalArgumentException.class, () -> Soles.format(-1));
    }

    @Test
    void parsesSolesWithZeroOneOrTwoDecimals() {
        assertEquals(450, Soles.parse("4.50"));
        assertEquals(450, Soles.parse("4.5"));
        assertEquals(400, Soles.parse("4"));
        assertEquals(5, Soles.parse("0.05"));
    }

    @Test
    void parseIgnoresSpacesAtTheEnds() {
        assertEquals(1_200, Soles.parse(" 12.00 "));
    }

    @Test
    void parseRejectsTextThatIsNotAnAmount() {
        assertThrows(IllegalArgumentException.class, () -> Soles.parse(""));
        assertThrows(IllegalArgumentException.class, () -> Soles.parse("4,50"));
        assertThrows(IllegalArgumentException.class, () -> Soles.parse("-1"));
        assertThrows(IllegalArgumentException.class, () -> Soles.parse("4.505"));
        assertThrows(IllegalArgumentException.class, () -> Soles.parse("cuatro"));
        assertThrows(IllegalArgumentException.class, () -> Soles.parse("4."));
    }
}
