package capitulo08.bloque01;

import capitulo08.bloque01.operaciones.Delete;
import capitulo08.bloque01.operaciones.Insert;
import capitulo08.bloque01.operaciones.Select;
import capitulo08.bloque01.operaciones.Update;

import java.sql.*;

import static capitulo04.utils.Utils.solicitarIntScannerInline;
import static capitulo04.utils.Utils.solicitarStringScannerInline;

public class Main {
    public static void main(String[] args) {
        int opcion = 0;
        Connection conn = null;
        try {
            conn = getConexion();
        } catch (SQLException | ClassNotFoundException e) {
            throw new RuntimeException(e);
        }

        do {
            System.out.println(
                    "Seleccione una operación:\n" +
                            "0 - Salir del programa\n" +
                            "1 - Mostrar todos los fabricantes\n" +
                            "2 - Añadir un fabricante\n" +
                            "3 - Actualizar un fabricante\n" +
                            "4 - Eliminar un fabricante");
            opcion = solicitarIntScannerInline("> ");

            try {
                switch (opcion) {
                    case 1: {
                        Select.mostrarTabla(conn, "fabricante");
                        break;
                    }
                    case 2: {
                        Insert.addFabricante(conn,
                                solicitarStringScannerInline("Introduzca el CIF: "),
                                solicitarStringScannerInline("Introduzca el Nombre: "));
                        break;
                    }
                    case 3: {
                        int id;
                        do {
                            id = solicitarIntScannerInline("Introduzca el ID del fabricante: ");
                        } while (!Select.isIdValid(conn, "fabricante", id));
                        String cifNuevo = solicitarStringScannerInline("Introduzca el nuevo CIF (en blanco para no cambiar): ");
                        String nombreNuevo = solicitarStringScannerInline("Introduzca el nuevo Nombre (en blanco para no cambiar): ");
                        Update.actualizarFabricante(conn, id, cifNuevo, nombreNuevo);
                        break;
                    }
                    case 4: {
                        int id;
                        do {
                            id = solicitarIntScannerInline("Introduzca el ID del fabricante: ");
                        } while (!Select.isIdValid(conn, "fabricante", id));
                        Delete.eliminarRegistro(conn, "fabricante", id);
                        break;
                    }
                }
            } catch (SQLException e) {
                throw new RuntimeException(e);
            }

        } while (opcion != 0);
    }

    private static Connection getConexion() throws ClassNotFoundException, SQLException {
        Class.forName(PropiedadesBBDD.getMySQLDriver());
        return DriverManager.getConnection(PropiedadesBBDD.getMySQLConnectionString());
    }

}
