import java.io.*;
import java.net.HttpURLConnection;
import java.net.URI;
import java.nio.charset.StandardCharsets;
import java.util.List;
import java.util.Map;
import java.util.Scanner;

import static java.lang.System.exit;


public class CreateDocumentTutorial {

    // Replace with your HostMyApi Data Table URL
    private static String HOST_MY_API_TABLE_URL;
    // Replace with your HostMyApi Access Key
    private static String HOST_MY_API_KEY_ID;


    public static void main(String[] args) {
        System.out.println("Arguments Passed: " + args.length);
        for (int i = 0; i < args.length; i++) {
            System.out.println("Argument " + i + " is: " + args[i]);
        }
        if (args.length < 2) {
            System.out.println();
            System.out.println("Error: " + "Must provide 2 arguments for TABLE URL and Key ID.");
            exit(-1);
        } else {

            HOST_MY_API_TABLE_URL = args[0];
            HOST_MY_API_KEY_ID = args[1];
            System.out.println();
            System.out.println("Information: " + "TABLE URL used is " + HOST_MY_API_TABLE_URL);
            System.out.println("Information: " + "KEY ID used is " + HOST_MY_API_KEY_ID);
            System.out.println();

            try {
                File testFile = new File("WorkDaysData_v01.json");
                Scanner testReader = new Scanner(testFile);
                while (testReader.hasNextLine()) {
                    String dayOfWeek = testReader.nextLine();
                    System.out.println(dayOfWeek);
                }




                var url = URI.create(HOST_MY_API_TABLE_URL).toURL();
                HttpURLConnection connection = (HttpURLConnection) url.openConnection();
                // Set Header with the HostMyApi Access Key
                connection.setRequestProperty("X-API-KEY", HOST_MY_API_KEY_ID);
                // Set POST request
                connection.setRequestMethod("POST");
                connection.setRequestProperty("Accept", "application/json");
                connection.setRequestProperty("Content-Type", "application/json");
                connection.setDoOutput(true);
                OutputStream os = connection.getOutputStream();
                OutputStreamWriter osw = new OutputStreamWriter(os, "UTF-8");
                File daysOfWeekV01 = new File("WorkDaysData_v01.json");
                Scanner myReader = new Scanner(daysOfWeekV01);
                while (myReader.hasNextLine()) {
                    String dayOfWeek = myReader.nextLine();
                    osw.write(dayOfWeek);
                }
//            osw.write("[{\"dayNumber\": \"7\"}]");
                osw.flush();
                osw.close();
                os.close();  //don't forget to close the OutputStream

                int responseCode = connection.getResponseCode();
                if (responseCode == HttpURLConnection.HTTP_OK) { // success
                    BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream(), StandardCharsets.UTF_8));
                    String inputLine;
                    while ((inputLine = in.readLine()) != null) {
                        System.out.println(inputLine);
                    }
                    in.close();
                    connection.disconnect();
                } else {
                    System.out.println("HostMyApi Data request has not worked");
                    System.out.println("status: " + responseCode);
                    System.out.println("error: \"" + "\"");
                    System.out.println("message: \"" + "\"");
                    System.out.println("path: \"" + url.getPath() + "\"");
                    /**
                     * Try to emulate Curl error response:
                     * timestamp: 1723546524584
                     * status: 400
                     * error: "Bad Request"
                     * message: "You must provide an api key for this request" from HTTP Status Message
                     * path: "/v2/tables/T-c4b024cf-ad56-4b93-a4c7-ccfa501c3929"
                     */
                    System.out.println("POST request not worked");
                    BufferedReader errorReader = new BufferedReader(new InputStreamReader(connection.getErrorStream(), StandardCharsets.UTF_8));
                    String errorLine;
                    StringBuilder errorContent = new StringBuilder();
                    while ((errorLine = errorReader.readLine()) != null) {
                        errorContent.append(errorLine);
                        System.out.println(errorLine);
                    }
                    errorReader.close();
                    System.out.println("Error Response: " + errorContent.toString());


                    Map<String, List<String>> map = connection.getHeaderFields();
                    System.out.println("Printing All Response Header for URL: " + HOST_MY_API_TABLE_URL + "\n");
                    for (Map.Entry<String, List<String>> entry : map.entrySet()) {
                        System.out.println(entry.getKey() + " : " + entry.getValue());
                    }

                }
            } catch (IOException e) {
                e.printStackTrace();
            }

        }
    }
}