import java.util.Properties;

public class Main implements SQLRequestListener {

    String host;
    Integer port;
    String dbname;
    String username;
    String password;
    SybaseDB db;
    StdInputReader input;
    Properties properties;

    public static void main(String[] args) {
        // Espera no mínimo 5 argumentos:
        // host, port, dbname, username, password, e opcionalmente diversas propriedades no formato CHAVE=VALOR.
        if (args.length < 5) {
            System.err.println("Esperando os argumentos: host, port, dbname, username, password, [CHAVE=VALOR ...]");
            System.exit(1);
        }

        String host = args[0];
        Integer port = Integer.parseInt(args[1]);
        String dbname = args[2];
        String username = args[3];
        String password = args[4];

        Properties props = new Properties();

        // Processa os argumentos adicionais, se houver, como pares CHAVE=VALOR
        if (args.length > 5) {
            for (int i = 5; i < args.length; i++) {
                String[] keyValue = args[i].split("=", 2);
                if (keyValue.length != 2) {
                    System.err.println("Formato inválido para propriedade: " + args[i] + ". Utilize o formato CHAVE=VALOR.");
                    System.exit(1);
                }
                props.setProperty(keyValue[0], keyValue[1]);
            }
        }

        new Main(host, port, dbname, username, password, props);
    }

    public Main(String host, Integer port, String dbname, String username, String password, Properties props) {
        this.host = host;
        this.port = port;
        this.dbname = dbname;
        this.username = username;
        this.password = password;
        this.properties = props;

        input = new StdInputReader();
        input.addListener(this);

        // Utiliza as propriedades passadas diretamente na criação do objeto SybaseDB
        db = new SybaseDB(host, port, dbname, username, password, properties);
        if (!db.connect()) {
            System.exit(1);
        }

        System.out.println("connected");
        input.startReadLoop();
    }

    public void sqlRequest(SQLRequest request) {
        db.execSQL(request);
    }
}
