package be.msyben.vinylManager.tools.discogs;

import javax.swing.JFrame;

/**
 * Résultat d'une recherche.
 *
 * @author Mathieu Syben
 */
public class DiscogsSearchResult {

    private long discogsId;
    private String titre;
    private String label;
    private String reference;
    private String annee;
    private String resourceUrl;
    private String genre;
    private String format;
    private String pays;
    private String thumb;
    private byte[] thumbImage = null;

    /**
     * Permet de récupérer l'image de prévisualisation et la met en cache pour
     * utilisation future.
     *
     * @return L'image de prévisualisation ou null si existe pas.
     */
    public synchronized byte[] getThumbImage(JFrame parent) {
        if (thumbImage != null) {
            return thumbImage;
        }
        if (thumb == null || thumb.isEmpty()) {
            return null;
        }
        thumbImage = DiscogsDownloader.downloadURL(thumb);
        
        return thumbImage;
    }

    /**
     * Méthode permettant d'obtenir la valeur de thumb.
     *
     * @return thumb
     */
    public String getThumb() {
        return thumb;
    }

    /**
     * Méthode permettant de setter la valeur de thumb.
     *
     * @param thumb thumb
     */
    public void setThumb(String thumb) {
        this.thumb = thumb;
    }

    /**
     * Méthode permettant d'obtenir la valeur de annee.
     *
     * @return annee
     */
    public String getAnnee() {
        return annee;
    }

    /**
     * Méthode permettant de setter la valeur de annee.
     *
     * @param annee annee
     */
    public void setAnnee(String annee) {
        this.annee = annee;
    }

    /**
     * Méthode permettant d'obtenir la valeur de label.
     *
     * @return label
     */
    public String getLabel() {
        return label;
    }

    /**
     * Méthode permettant de setter la valeur de label.
     *
     * @param label label
     */
    public void setLabel(String label) {
        this.label = label;
    }

    /**
     * Méthode permettant d'obtenir la valeur de reference.
     *
     * @return reference
     */
    public String getReference() {
        return reference;
    }

    /**
     * Méthode permettant de setter la valeur de reference.
     *
     * @param reference reference
     */
    public void setReference(String reference) {
        this.reference = reference;
    }

    /**
     * Méthode permettant d'obtenir la valeur de resourceurl.
     *
     * @return resourceurl
     */
    public String getResourceUrl() {
        return resourceUrl;
    }

    /**
     * Méthode permettant de setter la valeur de resourceurl.
     *
     * @param resourceUrl resourceUrl
     */
    public void setResourceUrl(String resourceUrl) {
        this.resourceUrl = resourceUrl;
    }

    /**
     * Méthode permettant d'obtenir la valeur de titre.
     *
     * @return titre
     */
    public String getTitre() {
        return titre;
    }

    /**
     * Méthode permettant de setter la valeur de titre.
     *
     * @param titre titre
     */
    public void setTitre(String titre) {
        this.titre = titre;
    }

    /**
     * Méthode permettant d'obtenir la valeur de format.
     *
     * @return format
     */
    public String getFormat() {
        return format;
    }

    /**
     * Méthode permettant de setter la valeur de format.
     *
     * @param format format
     */
    public void setFormat(String format) {
        this.format = format;
    }

    /**
     * Méthode permettant d'obtenir la valeur de genre.
     *
     * @return genre
     */
    public String getGenre() {
        return genre;
    }

    /**
     * Méthode permettant de setter la valeur de genre.
     *
     * @param genre genre
     */
    public void setGenre(String genre) {
        this.genre = genre;
    }

    /**
     * Méthode permettant d'obtenir la valeur de pays.
     *
     * @return pays
     */
    public String getPays() {
        return pays;
    }

    /**
     * Méthode permettant de setter la valeur de pays.
     *
     * @param pays pays
     */
    public void setPays(String pays) {
        this.pays = pays;
    }

    public long getDiscogsId() {
        return discogsId;
    }

    public void setDiscogsId(long discogsId) {
        this.discogsId = discogsId;
    }

    @Override
    public String toString() {
        return "DiscogsSearchResult{" + "titre=" + titre + ", label=" + label + ", reference=" + reference + ", annee=" + annee + ", resourceUrl=" + resourceUrl + ", genre=" + genre + ", format=" + format + ", pays=" + pays + '}';
    }
}