package automotoras06;

import javax.swing.*;
import javax.swing.table.*;
import java.util.*;

/**
 *
 * @author lalo
 */
public class VehiculoTableModel extends AbstractTableModel {

    private String[] titulos = {"id", "patente", "marca", "modelo", "color", "kilometraje", "año", "precio", "foto", "vendido"};
    private ArrayList<Vehiculo> datos;


    /**
     * metodo que obtiene la lista de autos
     * @return lista con todos los autos
     */
    public ArrayList<Vehiculo> getDatos() {
        return datos;
    }

    /**
     * metodo para setiar nuevos vehiculos
     * @param datos es una lista de vehiculos que seran los valores nuevos
     */
    public void setDatos(ArrayList<Vehiculo> datos) {
        this.datos = datos;
    }

    /**
     *
     * @param e vehiculo que va a ser agreado a una lista
     * @return un booleano que simbolisa si se agrego de forma exitosa
     */
    public boolean add(Vehiculo e) {
        boolean b = datos.add(e);
        this.fireTableDataChanged();
        return b;
    }



    /**
     * crea el modelo de la tabla
     * @param datos sirve para dimensionar el tamañode la tabla
     */
    public VehiculoTableModel(ArrayList<Vehiculo> datos) {
        this.datos = datos;
    }

    /**
     * crea el modelo de la tabla cuando no existen vehiculos
     */
    public VehiculoTableModel() {
        this.datos = new ArrayList<Vehiculo>();
    }

    public int getRowCount() {
        return datos.size();
    }

    public int getColumnCount() {
        return titulos.length;
    }

    public Object getValueAt(int fila, int columna) {
        Vehiculo vehiculo = datos.get(fila);
        switch (columna) {
            case 0:
                return vehiculo.getId();
            case 1:
                return vehiculo.getPatente();
            case 2:
                return vehiculo.getMarca();
            case 3:
                return vehiculo.getModelo();
            case 4:
                return vehiculo.getColor();
            case 5:
                return vehiculo.getKilometraje();
            case 6:
                return vehiculo.getAnio();
            case 7:
                return vehiculo.getPrecio();
            case 8:
                return vehiculo.getfoto();
            case 9:
                return vehiculo.getVendido();
            default:
                return "No deberiamos llegar aqui nunca";
        }
    }

    @Override
    public String getColumnName(int columna) {
        return titulos[columna];
    }

    @Override
    public Class getColumnClass(int columna) {
        switch (columna) {
            case 0:
                return Integer.class;
            case 5:
                return Integer.class;
            case 6:
                return Integer.class;
            case 7:
                return Integer.class;
            case 9:
                return Boolean.class;
 

            default:
                return String.class;
        }
    }

    @Override
    public boolean isCellEditable(int fila, int columna) {
        if (columna == 0) {
            return false;
        } // el ID no se puede cambiar
        else {
            return true;
        }
    }

    @Override
    public void setValueAt(Object valor, int fila, int columna) {
        Vehiculo vehiculo = datos.get(fila);
        switch (columna) {
            case 1:
                vehiculo.setPatente((String) valor);
                break;
            case 2:
                vehiculo.setMarca((String) valor);
                break;
            case 3:
                vehiculo.setModelo((String) valor);
                break;
            case 4:
                vehiculo.setColor((String) valor);
                break;
            case 5:
                vehiculo.setKilometraje((Integer) valor);
                break;
            case 6:
                vehiculo.setAnio((Integer) valor);
                break;
            case 7:
                vehiculo.setPrecio((Integer) valor);
                break;
            case 8:
                vehiculo.setfoto((String) valor);
                break;
            case 9:
                vehiculo.setVendido((Boolean) valor);
            
        }
        this.fireTableCellUpdated(fila, columna);
    }
}
