package org.autoplot;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.imageio.ImageIO;
import javax.swing.JComponent;

/**
 * Component for showing the status of the data set selector / time range selector GUI.
 * @author jbf
 */
public final class UriTimeRangeToggleButton extends JComponent {

    public UriTimeRangeToggleButton( ) {
        try {
            img= ImageIO.read( UriTimeRangeToggleButton.class.getResource("/resources/tinyButton2.png") );
            imgUp=  ImageIO.read( UriTimeRangeToggleButton.class.getResource("/resources/tinyButtonUp.png") );
            imgDn=  ImageIO.read( UriTimeRangeToggleButton.class.getResource("/resources/tinyButtonDn.png") );
            setPosition(0);
        } catch (IOException ex) {
            Logger.getLogger(UriTimeRangeToggleButton.class.getName()).log(Level.SEVERE, null, ex);
        }
        setPreferredSize( new Dimension( img.getHeight(), img.getWidth() ) );
        setMaximumSize( new Dimension( img.getHeight(), img.getWidth() ) );
        setMinimumSize( new Dimension( img.getHeight(), img.getWidth() ) );

        this.setToolTipText("Green Data Set Selector (Ctrl-D), Blue for Time Range Selector (Ctrl-T)");
        
        MouseAdapter ma= getMouseAdapter();
        this.addMouseListener( ma );
        this.addMouseMotionListener( ma );
        
    }
           
    public static final String PROP_POSITION= "position";
    
    BufferedImage img;
    BufferedImage imgUp; // upper button is selected
    BufferedImage imgDn; // lower button is selected

    int pendingPos= -1;
    
    /**
     * 0 is up 1 is down.
     * @param pos 
     */
    public final void setPosition( int pos ) {
        if ( pos==1 ) {
            img= imgUp;
        } else {
            img= imgDn;
        }
        repaint();
    }
    
    @Override
    protected void paintComponent(Graphics g) {
        g.setColor( this.getBackground() );
        //g.setColor( Color.BLUE );
        g.fillRect( 0, 0, img.getWidth()+2, img.getHeight()+2 );
        g.drawImage( img, 0, 0, this );
        if ( pendingPos>-1 ) {
            int y;
            if ( pendingPos==1 ) {
                y= img.getHeight()/2 * (1-pendingPos) + 4;
            } else {
                y= img.getHeight()/2 * (1-pendingPos) + ( pendingPos ) * 2;
            }
            g.setColor(Color.BLACK);
            g.drawRect( 1, y+1, img.getWidth()-2, img.getWidth()-2 );
        }
    }
    
    private MouseAdapter getMouseAdapter() {
        return new java.awt.event.MouseAdapter() {
            @Override
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                if ( evt.getY()< img.getHeight() / 2 ) {
                    firePropertyChange( PROP_POSITION, -1, 1 );
                } else {
                    firePropertyChange( PROP_POSITION, -1, 0 );
                }
            }

            @Override
            public void mouseMoved(MouseEvent evt) {
                if ( evt.getY()< img.getHeight() / 2 ) {
                    pendingPos= 1;
                } else {
                    pendingPos= 0;
                }  
                repaint();
            }

            @Override
            public void mouseEntered(MouseEvent evt) {
                if ( evt.getY()< img.getHeight() / 2 ) {
                    pendingPos= 1;
                } else {
                    pendingPos= 0;
                }
                repaint();
            }

            @Override
            public void mouseExited(MouseEvent evt) {
                pendingPos= -1;
                repaint();
            }
            
        };
    }
}