package ch.epfl.isochrone.tiledmap;

import java.awt.image.BufferedImage;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;

import javax.imageio.ImageIO;

/**
 * Classe servant un fournisseur de tuile OSM
 * 
 * @author Charles Thiebaut (238935)
 * @author Arnaud Delamare (234841)
 * 
 */
public class OSMTileProvider implements TileProvider {
    private String base;
    private Tile errorTile;
    
    /**
     * 
     * @param adresseBase
     *        L'adresse de base du serveur
     * @throws IOException
     *        Si le programme n'arrive pas à ouvrir la tile d'erreur
     */
    public OSMTileProvider(String adresseBase) throws IOException
    {
        this.base=adresseBase;
        this.errorTile=new Tile(0,0,0,ImageIO.read(getClass().getResource("/images/error-tile.png")));
    }
    
    /**
     * 
     * Constructeur avec en paramètre une URL à la place d'un string
     */
    public OSMTileProvider(URL adresseBase) throws IOException
    {
        this(adresseBase.toString());
    }
    
    /**
     *
     * Retourne la tile correspondante ou la tile d'erreur si la bonne tile n'a pas pu être chargée
     * 
     * @param zoom
     *        Le zoom de la Tile
     *        
     * @param x
     *        La position x de la Tile
     *        
     * @param y
     *        La position y de la Tile 
     */
    @Override
    public Tile tileAt(int zoom, int x, int y) {
        try {
            URL adresse =  new URL(base + "/" + zoom + "/" + x + "/" + y + ".png");
            BufferedImage image = ImageIO.read(adresse);
            
            return new Tile(x,y,zoom,image);
            
        } catch (MalformedURLException e) {
          
            return errorTile;
        } catch (IOException e) {
            return errorTile;
        }  
         
    }

}
