import java.io.IOException;
import java.util.List;
import java.util.function.Consumer;

/** Decorator: registra cada operación y delega el trabajo en otro repositorio. */
public class LoggingSongRepository implements SongRepository {
    private final SongRepository inner;
    private final Consumer<String> log;

    public LoggingSongRepository(SongRepository inner, Consumer<String> log) {
        this.inner = inner;
        this.log = log;
    }

    @Override
    public List<Song> load() throws IOException {
        try {
            List<Song> songs = inner.load();
            log.accept("load: " + songs.size() + " canciones");
            return songs;
        } catch (IOException e) {
            log.accept("load falló: " + e.getMessage());
            throw e;
        }
    }

    @Override
    public void save(List<Song> songs) throws IOException {
        inner.save(songs);
        log.accept("save: " + songs.size() + " canciones");
    }
}
