/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package demojsoncrud.sqlserverdao;

import demojsoncrud.beans.UbigeoBean;
import demojsoncrud.dao.UbigeoDAO;
import demojsoncrud.utilities.ResponseHelper;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import org.json.JSONArray;
import org.json.JSONObject;

/**
 *
 * @author Alonso
 */
public class UbigeoSqlserverDAO implements UbigeoDAO {

    @Override
    public JSONObject listarDepartamento() {
        JSONObject jsonReturn = new JSONObject();
        JSONArray data = new JSONArray();
        PreparedStatement psListarDepartamento = null;
        ResultSet rsListarDepartamento = null;
        Connection connection = null;
        String base = "ubigeo";
        ResponseHelper response = new ResponseHelper();

        try {
            connection = SqlserverDAOFactory.obtenerConexion(base);
            String sql
                    = "select "
                    + "codDepartamento as codigoDepartamento, "
                    + "nombreDepartamento as nombreDepartamento "
                    + "from ubigeo "
                    + "group by codDepartamento, nombreDepartamento "
                    + "order by nombreDepartamento";
            psListarDepartamento = connection.prepareStatement(sql);
            rsListarDepartamento = psListarDepartamento.executeQuery();
            while (rsListarDepartamento.next()) {
                UbigeoBean ubigeoBean = new UbigeoBean();
                ubigeoBean.setCodigoDepartamento(rsListarDepartamento.getString("codigoDepartamento"));
                ubigeoBean.setNombreDepartamento(rsListarDepartamento.getString("nombreDepartamento"));
                JSONObject obj = new JSONObject(ubigeoBean);
                data.put(obj);
            }

            JSONObject jsonData = new JSONObject();
            jsonData.put("departamentos", data);

            response.setData(jsonData);
            response.setMessage("Listado correctamente!");
            response.setStatus(true);

        } catch (SQLException e) {
            response.setMessage("Error al listarDepartamento -> " + e.getMessage() + " Error code [" + e.getErrorCode() + "].");
            response.setStatus(false);
        } finally {
            try {
                if (rsListarDepartamento != null) {
                    rsListarDepartamento.close();
                }
                if (psListarDepartamento != null) {
                    psListarDepartamento.close();
                }
                if (connection != null) {
                    connection.close();
                }
            } catch (SQLException e) {
                response.setMessage("Error al listarDepartamento -> " + e.getMessage() + " Error code [" + e.getErrorCode() + "].");
                response.setStatus(false);
            }

        }

        jsonReturn = new JSONObject(response);

        return jsonReturn;
    }

    @Override
    public JSONObject listarProvincia(UbigeoBean bean) {
        JSONObject jsonReturn = new JSONObject();
        JSONArray data = new JSONArray();
        PreparedStatement psListarProvincia = null;
        ResultSet rsListarProvincia = null;
        Connection connection = null;
        String base = "ubigeo";
        ResponseHelper response = new ResponseHelper();

        try {
            connection = SqlserverDAOFactory.obtenerConexion(base);
            String sql
                    = "select "
                    + "codProvincia as codigoProvincia, "
                    + "nombreProvincia as nombreProvincia "
                    + "from ubigeo "
                    + "where codDepartamento = ? "
                    + "group by codProvincia, nombreProvincia "
                    + "order by nombreProvincia";
            psListarProvincia = connection.prepareStatement(sql);
            psListarProvincia.setString(1, bean.getCodigoDepartamento());
            rsListarProvincia = psListarProvincia.executeQuery();
            while (rsListarProvincia.next()) {
                UbigeoBean ubigeoBean = new UbigeoBean();
                ubigeoBean.setCodigoProvincia(rsListarProvincia.getString("codigoProvincia"));
                ubigeoBean.setNombreProvincia(rsListarProvincia.getString("nombreProvincia"));
                JSONObject obj = new JSONObject(ubigeoBean);
                data.put(obj);
            }

            JSONObject jsonData = new JSONObject();
            jsonData.put("provincias", data);

            response.setData(jsonData);
            response.setMessage("Listado correctamente!");
            response.setStatus(true);

        } catch (SQLException e) {
            response.setMessage("Error al listarProvincia -> " + e.getMessage() + " Error code [" + e.getErrorCode() + "].");
            response.setStatus(false);
        } finally {
            try {
                if (rsListarProvincia != null) {
                    rsListarProvincia.close();
                }
                if (psListarProvincia != null) {
                    psListarProvincia.close();
                }
                if (connection != null) {
                    connection.close();
                }
            } catch (SQLException e) {
                response.setMessage("Error al listarProvincia -> " + e.getMessage() + " Error code [" + e.getErrorCode() + "].");
                response.setStatus(false);
            }

        }

        jsonReturn = new JSONObject(response);

        return jsonReturn;
    }

    @Override
    public JSONObject listarDistrito(UbigeoBean bean) {
        JSONObject jsonReturn = new JSONObject();
        JSONArray data = new JSONArray();
        PreparedStatement psListarDistrito = null;
        ResultSet rsListarDistrito = null;
        Connection connection = null;
        String base = "ubigeo";
        ResponseHelper response = new ResponseHelper();

        try {
            connection = SqlserverDAOFactory.obtenerConexion(base);
            String sql
                    = "select "
                    + "codDistrito as codigoDistrito, "
                    + "nombreDistrito as nombreDistrito "
                    + "from ubigeo "
                    + "where codProvincia = ? and codDepartamento = ? "
                    + "order by nombreDistrito";
            psListarDistrito = connection.prepareStatement(sql);
            psListarDistrito.setString(1, bean.getCodigoProvincia());
            psListarDistrito.setString(2, bean.getCodigoDepartamento());
            rsListarDistrito = psListarDistrito.executeQuery();
            while (rsListarDistrito.next()) {
                UbigeoBean ubigeoBean = new UbigeoBean();
                ubigeoBean.setCodigoDistrito(rsListarDistrito.getString("codigoDistrito"));
                ubigeoBean.setNombreDistrito(rsListarDistrito.getString("nombreDistrito"));
                JSONObject obj = new JSONObject(ubigeoBean);
                data.put(obj);
            }

            JSONObject jsonData = new JSONObject();
            jsonData.put("distritos", data);

            response.setData(jsonData);
            response.setMessage("Listado correctamente!");
            response.setStatus(true);

        } catch (SQLException e) {
            response.setMessage("Error al listarDistrito -> " + e.getMessage() + " Error code [" + e.getErrorCode() + "].");
            response.setStatus(false);
        } finally {
            try {
                if (rsListarDistrito != null) {
                    rsListarDistrito.close();
                }
                if (psListarDistrito != null) {
                    psListarDistrito.close();
                }
                if (connection != null) {
                    connection.close();
                }
            } catch (SQLException e) {
                response.setMessage("Error al listarDistrito -> " + e.getMessage() + " Error code [" + e.getErrorCode() + "].");
                response.setStatus(false);
            }

        }

        jsonReturn = new JSONObject(response);

        return jsonReturn;
    }

}
