// License: GPL. For details, see LICENSE file.
package org.openstreetmap.josm.gui.io;

import static org.openstreetmap.josm.tools.I18n.tr;

import java.awt.Component;
import java.text.SimpleDateFormat;

import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.ListCellRenderer;
import javax.swing.UIManager;

import org.openstreetmap.josm.data.osm.Changeset;
import org.openstreetmap.josm.tools.ImageProvider;

/**
 * A {@see ListCellRenderer} for the list of changesets in the upload dialog.
 *
 *
 */
public class ChangesetCellRenderer extends JLabel implements ListCellRenderer {
    private ImageIcon icon ;
    public ChangesetCellRenderer() {
        icon = ImageProvider.get("data", "changeset");
        setOpaque(true);
    }

    protected String buildToolTipText(Changeset cs) {
        StringBuilder sb = new StringBuilder();
        sb.append("<html>");
        sb.append("<strong>").append(tr("Changeset id:")).append("</strong>").append(cs.getId()).append("<br>");
        if (cs.getCreatedAt() != null) {
            SimpleDateFormat df  =new SimpleDateFormat();
            sb.append("<strong>").append(tr("Created at:")).append("</strong>").append(df.format(cs.getCreatedAt())).append("<br>");
        }
        if (cs.get("comment") != null) {
            sb.append("<strong>").append(tr("Changeset comment:")).append("</strong>").append(cs.get("comment")).append("<br>");
        }
        return sb.toString();
    }

    public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected,
            boolean cellHasFocus) {
        Changeset cs = (Changeset)value;
        if (isSelected) {
            setForeground(UIManager.getColor("List.selectionForeground"));
            setBackground(UIManager.getColor("List.selectionBackground"));
        } else {
            setForeground(UIManager.getColor("List.foreground"));
            setBackground(UIManager.getColor("List.background"));
        }
        if (cs != null) {
            setIcon(icon);
            StringBuffer sb = new StringBuffer();
            if (cs.get("comment") != null) {
                sb.append(cs.getId()).append(" - ").append(cs.get("comment"));
            } else if (cs.get("name") != null) {
                sb.append(cs.getId()).append(" - ").append(cs.get("name"));
            } else {
                sb.append(tr("Changeset {0}", cs.getId()));
            }
            setText(sb.toString());
            setToolTipText(buildToolTipText(cs));
        } else {
            setText(tr("No open changeset"));
        }
        return this;
    }
}
