diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..be1d1e8
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,8 @@
+### IntelliJ IDEA ###
+.idea
+logs/*
+*.iws
+*.iml
+*.ipr
+
+target/
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
new file mode 100644
index 0000000..4386776
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,50 @@
+
+
+ 4.0.0
+
+ rvc
+ time-calc
+ 1.0.0
+
+ time-calc
+ time-calc
+
+
+ 1.8
+ 8
+ 8
+ UTF-8
+ UTF-8
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ 3.6.1
+
+ 1.8
+ 1.8
+
+
+
+ org.apache.maven.plugins
+ maven-jar-plugin
+
+
+
+ true
+ rvc.timecalc.Main
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/java/rvc/timecalc/Main.java b/src/main/java/rvc/timecalc/Main.java
index fffa07a..853cca4 100644
--- a/src/main/java/rvc/timecalc/Main.java
+++ b/src/main/java/rvc/timecalc/Main.java
@@ -1,6 +1,119 @@
-package rvc.timecalc;/**
+package rvc.timecalc;
+
+import java.io.IOException;
+import java.text.DecimalFormat;
+import java.text.NumberFormat;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.HashSet;
+import java.util.Scanner;
+import java.util.Set;
+
+/**
* @author Robert
* @since 31.01.2024
*/
public class Main {
+ public static void main(String[] args) {
+ while(true) {run(args);
+ System.out.println(("Do you want to continue (y/n)?"));
+ Scanner scanner = new Scanner(System.in);
+ if(!scanner.nextLine().equals("y")) {
+ System.out.println("Exiting \"Time Calc\".");
+ break;
+ }
+ }
+
+ }
+ public static void run(String[] args) {
+ System.out.println("*** Time Calc ***");
+ System.out.println("-----------------\n");
+ int EXPECTED_ARG_COUNT = 2;
+ if (args.length == 0) {
+ Scanner scanner = new Scanner(System.in);
+ args = new String[2];
+ System.out.print("Arguments: ");
+ String returned = scanner.nextLine();
+ args[0] = returned.split(" ")[0];
+ if (returned.contains(" ")) {
+ args[1] = returned.split(" ")[1];
+ } else {
+ args[1] = "0:00";
+ }
+ }
+ if (args.length < EXPECTED_ARG_COUNT) {
+ throw new RuntimeException(
+ "Expected arg count is " + EXPECTED_ARG_COUNT
+ + ", but count of found args is: " + args.length);
+ }
+ String startTime = args[0];
+ String overtimeUsed = args[1];
+ int startHour = Integer.valueOf(startTime.split(":")[0]);
+ int startMinute = Integer.valueOf(startTime.split(":")[1]);
+ // System.out.println("startHour=" + startHour);
+ // System.out.println("startMinute=" + startMinute);
+ int overtimeUsedHour = Integer.valueOf(overtimeUsed.split(":")[0]);
+ int overtimeUsedMinute = Integer.valueOf(overtimeUsed.split(":")[1]);
+ // System.out.println("overtimeUsedHour=" + overtimeUsedHour);
+ // System.out.println("overtimeUsedMinute=" + overtimeUsedMinute);
+
+ int endHour = startHour + 8 - overtimeUsedHour;
+ int endMinute = startMinute + 30 - overtimeUsedMinute;
+ while (endMinute >= 60) {
+ endMinute = endMinute - 60;
+ endHour = endHour + 1;
+ }
+ int totalMinutes = (endHour * 60 + endMinute) - (startHour * 60 + startMinute);
+// System.out.println("totalMinutes=" + totalMinutes);
+ // System.out.println("endHour=" + endHour);
+ // System.out.println("endMinute=" + endMinute);
+ System.out.println();
+ DateTimeFormatter dtf = DateTimeFormatter.ofPattern("HH:mm");
+
+ Set alreadyShownTimes = new HashSet<>();
+ NumberFormat formatter = new DecimalFormat("#0.00");
+
+ while (true) {
+ LocalDateTime now = LocalDateTime.now();
+ String nowString = dtf.format(now);
+ if (alreadyShownTimes.contains(nowString)) {
+ //nothing to do
+ continue;
+ } else {
+ alreadyShownTimes.add(nowString);
+ }
+ int hourNow = Integer.parseInt(nowString.split(":")[0]);
+ int minuteNow = Integer.parseInt(nowString.split(":")[1]);
+
+ // System.out.println("hourNow=" + hourNow);
+ // System.out.println("minuteNow=" + minuteNow);
+ int hourRemains = endHour - hourNow;
+ int minuteRemains = endMinute - minuteNow;
+ if (minuteRemains < 0) {
+ minuteRemains = minuteRemains + 60;
+ hourRemains = hourRemains - 1;
+ }
+ int hourDone = 8 - overtimeUsedHour - hourRemains;
+ int minutesDone = 30 - overtimeUsedMinute - minuteRemains;
+ int totalMinutesDone = hourDone * 60 + minutesDone;
+ double done = ((double)totalMinutesDone)/((double)totalMinutes);
+// System.out.println("hourDone=" + hourDone);
+// System.out.println("minutesDone=" + minutesDone);
+// System.out.println("totalMinutesDone=" + totalMinutesDone);
+ System.out.println("Progress: " + formatter.format(done * 100) + "% Remains " + String.format("%02d", hourRemains) + ":" + String
+ .format("%02d", minuteRemains) + " until end " + String
+ .format("%02d", endHour) + ":" + String
+ .format("%02d", endMinute));
+ if(minuteRemains <= 0) {
+ break;
+ }
+
+ try {
+ Thread.sleep(5000);
+ } catch (InterruptedException e) {
+
+ }
+ }
+ }
}
+