import java.util.ArrayList;
import java.util.List;

public final class Table {
    private final Column[] columns;
    private final List<Object[]> records;
    
    public Table(final Column[] columns){
        this.columns = columns;
        this.records = new ArrayList<Object[]>();
    }

    public final void insert(final Object... record) {
        if (record.length != columns.length) {
            throw new IllegalArgumentException();
        }
        records.add(record);
    }
    
    public final Object[] select(final int index){
        return records.get(index);
    }
    
    public final void delete(final int index){
        records.remove(index);
    }
    
    public final int size(){
        return records.size();
    }
    
    public final Type getType(final int index){
        return columns[index].getType();
    }
    
    public final String getAttribute(final int index){
        return columns[index].getAttribute();
    }
    
    public final Object[] getAllRecords(){
        Object[][] allRecords = new Object[records.size()][];
        for (int i = 0; i < records.size(); i++){
            allRecords[i] = records.get(i);
        }
        return allRecords;
    }
    
    public final Column[] getAllColumns(){
        return columns;
    }

    public enum Type {
        String,
        Integer,
    }
}