package be.msyben.vinylManager.tools.swing;

import be.msyben.vinylManager.tools.log.VinylManagerLogger;
import java.awt.Color;
import java.awt.Cursor;
import java.awt.Desktop;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import javax.swing.JLabel;

/**
 * Classe pour faire des objet de lien en swing.
 *
 * @author Mathieu Syben
 */
public class JLink extends JLabel {

    /**
     * uid
     */
    private static final long serialVersionUID = 3l;
    /**
     * La couleur normale du texte
     */
    private Color colorNormal = Color.BLUE;
    /**
     * La couleur du texte lorsque l'on clique sur le lien
     */
    private Color colorPressed = Color.RED;

    /**
     * Constructeur
     *
     * @param url L'url vers laquelle le lien va pointer
     */
    public JLink(String url) {
        this(url, url);
    }

    /**
     * Constructeur
     *
     * @param text Le texte à afficher
     * @param url L'url vers laquelle le lien va pointer
     */
    public JLink(String text, final String url) {
        super(text);

        this.setToolTipText(url);
        this.setForeground(colorNormal);
        this.setHorizontalAlignment(CENTER);
        this.setVerticalAlignment(CENTER);

        this.addMouseListener(new MouseListener() {
            @Override
            public void mouseClicked(MouseEvent e) {
                if (Desktop.isDesktopSupported()) {
                    Desktop desktop = Desktop.getDesktop();
                    if (desktop.isSupported(Desktop.Action.BROWSE)) {
                        try {
                            desktop.browse(new URI(url));
                        } catch (URISyntaxException ex) {
                            VinylManagerLogger.log(ex);
                        } catch (IOException ex) {
                            VinylManagerLogger.log(ex);
                        }
                    }
                }
            }

            @Override
            public void mousePressed(MouseEvent e) {
                setForeground(colorPressed);
            }

            @Override
            public void mouseReleased(MouseEvent e) {
                setForeground(colorNormal);
            }

            @Override
            public void mouseEntered(MouseEvent e) {
                setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
            }

            @Override
            public void mouseExited(MouseEvent e) {
                setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
            }
        });
    }
}