package be.msyben.vinylManager.pdf.datasources;

import be.msyben.vinylManager.entities.Album;
import be.msyben.vinylManager.entities.Collection;
import be.msyben.vinylManager.tools.Sort;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.List;
import net.sf.jasperreports.engine.JRDataSource;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JRField;

/**
 * Datasource pour le rapport liste courte
 * @author Mathieu Syben
 */
public class ListeCourt implements JRDataSource {

    private int idx = -1;
    private List<String[]> data = new ArrayList<String[]>();

    /**
     * Constructeur privé inutilisé
     */
    private ListeCourt() {
    }

    /**
     * Constructeur
     * @param collection la collection
     */
    public ListeCourt(Collection collection) {

        List<Album> albums = collection.getAlbums();
        Sort.sort(albums);
        
        for (Album album : albums) {
            int cote = album.getCote();
            String coteS = "";;
            if (cote > 0 && cote <= 5) {
                coteS = cote + (album.getCoteDemi()?".5":"") + "/5";
            }
            String[] entry = new String[]{album.getArtisteForList(), album.getAnnee(), album.getTitre(), coteS};
            data.add(entry);
        }
    }

    @Override
    public boolean next() throws JRException {
        if (data.isEmpty()) {
            return false;
        }
        idx++;
        return (idx < data.size());
    }

    @Override
    public Object getFieldValue(JRField jRField) throws JRException {
        if (jRField == null) {
            return null;
        }

        if (jRField.getName().equals("ARTISTE")) {
            return data.get(idx)[0];
        }
        if (jRField.getName().equals("ANNEE")) {
            return data.get(idx)[1];
        }
        if (jRField.getName().equals("TITRE")) {
            return data.get(idx)[2];
        }
        if (jRField.getName().equals("COTE")) {
            return data.get(idx)[3];
        }

        return null;
    }
}
