// Path: grafana-dashboard-generator/src/main/java/uk/co/szmg/grafana/GrafanaEndpoint.java
// public class GrafanaEndpoint {
// 
//     private String baseUrl;
//     private String apiKey;
//     private String sessionCookie;
//     private boolean skipSSLValidation;
// 
//     /**
//      * Gets Grafana base URL.
//      * @return base URL
//      */
//     public String getBaseUrl() {
//         return baseUrl;
//     }
// 
//     /**
//      * Sets Grafana base URL.
//      * @param baseUrl Grafana base URL
//      */
//     public void setBaseUrl(String baseUrl) {
//         this.baseUrl = baseUrl;
//     }
// 
//     /**
//      * Gets API key.
//      * @return API key
//      */
//     public String getApiKey() {
//         return apiKey;
//     }
// 
//     /**
//      * True if SSL cert check should be forced to pass.
//      * @return value of skipSSLValidation
//      */
//     public boolean isSkipSSLValidation() {
//         return skipSSLValidation;
//     }
// 
//     /**
//      * Sets API gey.
//      *
//      * http://docs.grafana.org/http_api/auth/
//      *
//      * You need either this or the sessionCookie for authentication.
//      *
//      * @param apiKey API key
//      */
//     public void setApiKey(String apiKey) {
//         this.apiKey = apiKey;
//     }
// 
//     /**
//      * Gets session cookie.
//      * @return session cookie
//      */
//     public String getSessionCookie() {
//         return sessionCookie;
//     }
// 
//     /**
//      * Sets session cookie.
//      *
//      * To get the value log in and copy the value of the "grafana_sess" cookie.
//      *
//      * You need either this or the apiKey for authentication.
//      *
//      * @param sessionCookie session cookie
//      */
//     public void setSessionCookie(String sessionCookie) {
//         this.sessionCookie = sessionCookie;
//     }
// 
//     /**
//      * Set to true if you don't want SSL cert validation.
//      * @param skipSSLCertValidation true if SSL cert validation should be skipped
//      */
//     public void setSkipSSLValidation(boolean skipSSLCertValidation) {
//         this.skipSSLValidation = skipSSLCertValidation;
//     }
// }


import uk.co.szmg.grafana.GrafanaEndpoint;
import uk.co.szmg.grafana.domain.Dashboard;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import de.codeshelf.consoleui.elements.ConfirmChoice;
import de.codeshelf.consoleui.elements.PromptableElementIF;
import de.codeshelf.consoleui.prompt.CheckboxResult;
import de.codeshelf.consoleui.prompt.ConfirmResult;
import de.codeshelf.consoleui.prompt.ConsolePrompt;
import de.codeshelf.consoleui.prompt.ListResult;
import de.codeshelf.consoleui.prompt.PromtResultItemIF;
import de.codeshelf.consoleui.prompt.builder.CheckboxPromptBuilder;
import de.codeshelf.consoleui.prompt.builder.ListPromptBuilder;
import de.codeshelf.consoleui.prompt.builder.PromptBuilder;
            if (config.getDashboards() == null) {
                CheckboxPromptBuilder dashboardPrompt = promptBuilder.createCheckboxPrompt()
                        .name("dashboards")
                        .message("Which dashboard(s) would you like to work with?");
                for (int i = 0; i < dashboards.size(); i++) {
                    dashboardPrompt.newItem(Integer.toString(i)).text(dashboards.get(i).getTitle()).check().add();
                }
                dashboardPrompt.addPrompt();
            }

            if (config.getEndpoint() == null) {
                ListPromptBuilder endpointPrompt = promptBuilder.createListPrompt()
                        .name("endpoint")
                        .message("Which endpoint to upload to?");
                for (Map.Entry<String, GrafanaEndpoint> entry : endpoints.entrySet()) {
                    endpointPrompt
                            .newItem(entry.getKey())
                            .text(String.format("%s (%s)", entry.getKey(), entry.getValue().getBaseUrl()))
                            .add();
                }
                endpointPrompt
                        .newItem("-")
                        .text("Just generate the files to " + config.getOutputDirectory())
                        .add()
                        .addPrompt();
            }

            if (config.getOverwrite() == null) {
                promptBuilder.createConfirmPromp()
                        .name("overwrite")
// Path: grafana-dashboard-generator/src/main/java/uk/co/szmg/grafana/GrafanaEndpoint.java
// public class GrafanaEndpoint {
// 
//     private String baseUrl;
//     private String apiKey;
//     private String sessionCookie;
//     private boolean skipSSLValidation;
// 
//     /**
//      * Gets Grafana base URL.
//      * @return base URL
//      */
//     public String getBaseUrl() {
//         return baseUrl;
//     }
// 
//     /**
//      * Sets Grafana base URL.
//      * @param baseUrl Grafana base URL
//      */
//     public void setBaseUrl(String baseUrl) {
//         this.baseUrl = baseUrl;
//     }
// 
//     /**
//      * Gets API key.
//      * @return API key
//      */
//     public String getApiKey() {
//         return apiKey;
//     }
// 
//     /**
//      * True if SSL cert check should be forced to pass.
//      * @return value of skipSSLValidation
//      */
//     public boolean isSkipSSLValidation() {
//         return skipSSLValidation;
//     }
// 
//     /**
//      * Sets API gey.
//      *
//      * http://docs.grafana.org/http_api/auth/
//      *
//      * You need either this or the sessionCookie for authentication.
//      *
//      * @param apiKey API key
//      */
//     public void setApiKey(String apiKey) {
//         this.apiKey = apiKey;
//     }
// 
//     /**
//      * Gets session cookie.
//      * @return session cookie
//      */
//     public String getSessionCookie() {
//         return sessionCookie;
//     }
// 
//     /**
//      * Sets session cookie.
//      *
//      * To get the value log in and copy the value of the "grafana_sess" cookie.
//      *
//      * You need either this or the apiKey for authentication.
//      *
//      * @param sessionCookie session cookie
//      */
//     public void setSessionCookie(String sessionCookie) {
//         this.sessionCookie = sessionCookie;
//     }
// 
//     /**
//      * Set to true if you don't want SSL cert validation.
//      * @param skipSSLCertValidation true if SSL cert validation should be skipped
//      */
//     public void setSkipSSLValidation(boolean skipSSLCertValidation) {
//         this.skipSSLValidation = skipSSLCertValidation;
//     }
// }


// Path: grafana-dashboard-generator-cli/src/main/java/uk/co/szmg/grafana/cli/internal/Interaction.java
import uk.co.szmg.grafana.GrafanaEndpoint;
import uk.co.szmg.grafana.domain.Dashboard;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import de.codeshelf.consoleui.elements.ConfirmChoice;
import de.codeshelf.consoleui.elements.PromptableElementIF;
import de.codeshelf.consoleui.prompt.CheckboxResult;
import de.codeshelf.consoleui.prompt.ConfirmResult;
import de.codeshelf.consoleui.prompt.ConsolePrompt;
import de.codeshelf.consoleui.prompt.ListResult;
import de.codeshelf.consoleui.prompt.PromtResultItemIF;
import de.codeshelf.consoleui.prompt.builder.CheckboxPromptBuilder;
import de.codeshelf.consoleui.prompt.builder.ListPromptBuilder;
import de.codeshelf.consoleui.prompt.builder.PromptBuilder;

            if (config.getDashboards() == null) {
                CheckboxPromptBuilder dashboardPrompt = promptBuilder.createCheckboxPrompt()
                        .name("dashboards")
                        .message("Which dashboard(s) would you like to work with?");
                for (int i = 0; i < dashboards.size(); i++) {
                    dashboardPrompt.newItem(Integer.toString(i)).text(dashboards.get(i).getTitle()).check().add();
                }
                dashboardPrompt.addPrompt();
            }

            if (config.getEndpoint() == null) {
                ListPromptBuilder endpointPrompt = promptBuilder.createListPrompt()
                        .name("endpoint")
                        .message("Which endpoint to upload to?");
                for (Map.Entry<String, GrafanaEndpoint> entry : endpoints.entrySet()) {
                    endpointPrompt
                            .newItem(entry.getKey())
                            .text(String.format("%s (%s)", entry.getKey(), entry.getValue().getBaseUrl()))
                            .add();
                }
                endpointPrompt
                        .newItem("-")
                        .text("Just generate the files to " + config.getOutputDirectory())
                        .add()
                        .addPrompt();
            }

            if (config.getOverwrite() == null) {
                promptBuilder.createConfirmPromp()
                        .name("overwrite")
                        .message("Should dashboards be overwritten if already exist?")