/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package MineSweeper;

/**
 *
 * @author Cecile
 */
public class MineSweeperGameType implements Comparable<MineSweeperGameType>,
        GameType<MineSweeperGameType>,java.io.Serializable
{
    String name;
    int w,h,n;
    MineSweeperGameType(String name_, int w_,int h_,int n_)
    {
        name=name_;
        w=w_;
        h=h_;
        n=n_;
    }

    MineSweeperGameType(String initstr)
    {
        initialize(initstr);
    }
    
    MineSweeperGameType()
    {
        name=null;
    }

    public boolean initialize(String type)
    {
        String []arr = type.split(":");
        if(arr.length!=4 && arr.length !=1)
        {
            return false;
        }
        if(arr.length==1)
        {
            name=arr[0];
            return false;
        }

        try{
            w=Integer.parseInt(arr[1]);
        }
        catch(NumberFormatException nfe)
        {
            System.err.println("NumberFormatException "+ arr[1] +" seem not" +
                    " to be a number");
            return false;
        }
        try{
            h=Integer.parseInt(arr[2]);
        }
        catch(NumberFormatException nfe)
        {
            System.err.println("NumberFormatException "+ arr[2] +" seem not" +
                    " to be a number");
            return false;
        }
        try{
            n=Integer.parseInt(arr[3]);
        }
        catch(NumberFormatException nfe)
        {
            System.err.println("NumberFormatException "+ arr[3] +" seem not" +
                    " to be a number");
            return false;
        }
        name=arr[0];
        return true;
    }

    public boolean isEmpty()
    {
        return (name==null);
    }
    
    public String getName()
    {
        return name;
    }

    public int compareTo(MineSweeperGameType o)
    {
        return name.toLowerCase().compareTo(o.name.toLowerCase());
    }
    public boolean equals(MineSweeperGameType o)
    {
        return name.toLowerCase().equals(o.name.toLowerCase());
    }
    @Override
    public int hashCode()
    {
        return name.hashCode();
    }

    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final MineSweeperGameType other = (MineSweeperGameType) obj;

        if ((this.name == null) ? (other.name != null) : !this.name.equals(other.name)) {
            return false;
        }
        return true;
    }
    
    @Override
    public String toString()
    {
        return name + " : " + w+" x "+h+" and "+n+" mine"+(n>1?"s":"");
    }

    public String getInitFormat() {
        return "name:width:height:number_of_mine";
    }
    
    public int getWidth()
    {
        return w;
    }
    
    public int getHeight()
    {
        return h;
    }

    public int getMines()
    {
        return n;
    }
}

