From 50bcdedb9b16a9da4d08eb3f8a8e7ee78f1cc19a Mon Sep 17 00:00:00 2001
From: u80864958 <niklas.breitenstein@bit.admin.ch>
Date: Mon, 7 Oct 2024 22:07:55 +0200
Subject: [PATCH] log time

---
 .timer.toml   |   3 ++
 lua/timer.lua | 111 ++++++++++++++++++++++++++++++++++++--------------
 2 files changed, 84 insertions(+), 30 deletions(-)
 create mode 100644 .timer.toml

diff --git a/.timer.toml b/.timer.toml
new file mode 100644
index 0000000..d4d0e55
--- /dev/null
+++ b/.timer.toml
@@ -0,0 +1,3 @@
+## dates and their corresponding seconds been here :)
+[24-10-07]
+u80864958_at_u80864958 = 432
diff --git a/lua/timer.lua b/lua/timer.lua
index a360263..294c1f3 100644
--- a/lua/timer.lua
+++ b/lua/timer.lua
@@ -1,13 +1,16 @@
 local TOML = require("toml")
-
-local augroup = vim.api.nvim_create_augroup("Timer", { clear = true })
-local focus_events = {}
-local clean_to = 1
-
 function trim(s)
   return (s:gsub("^%s*(.-)%s*$", "%1"))
 end
 
+local augroup = vim.api.nvim_create_augroup("Timer", { clear = true })
+local filename = ".timer.toml"
+local username = trim(os.getenv("USER")) .. "_at_" .. trim(io.popen("hostname -s"):read("*a"))
+local focus_events = {}
+local clean_to = 1
+
+
+
 local function clean_from(from, events)
   local to = 1
   local clean_events = {}
@@ -45,7 +48,7 @@ local function clean_from(from, events)
   return clean_events
 end
 
-local function time()
+local function summ_time()
   focus_events = clean_from(clean_to + 1, focus_events)
   clean_to = #focus_events
 
@@ -65,37 +68,72 @@ local function time()
   return t
 end
 
-local function log_time()
-  print(time())
+local function fmt_time(time)
+  local str = ""
+
+  local days = math.floor(time / (60 * 60 * 24))
+  if days ~= 0 then
+    str = str .. days .. "d"
+  end
+
+  time = time % (60 * 60 * 24)
+
+  local hours = math.floor(time / (60 * 60))
+  if hours ~= 0 then
+    str = str .. hours .. "h"
+  end
+
+  time = time % (60 * 60)
+
+  local minutes = math.floor(time / 60)
+  if minutes ~= 0 then
+    str = str .. minutes .. "m"
+  end
+
+  local seconds = time % (60)
+  if seconds ~= 0 then
+    str = str .. seconds .. "s"
+  end
+
+  return str
 end
 
+local function log_total_time()
+  local times = {}
+  times[username] = summ_time()
+
+  local file = io.open(filename, "r")
+
+  -- if file exists read
+  if file ~= nil then
+    local history = TOML.parse(file:read("*a"))
+    file:close()
+
+
+    for _, day in pairs(history) do
+      for user, time in pairs(day) do
+        if times[user] == nil then
+          times[user] = 0
+        end
+        times[user] = times[user] + time
+      end
+    end
+  end
+
+  for user, time in pairs(times) do
+    print(user, fmt_time(time))
+  end
+end
+
+
 local function log_time_table()
   for i, e in pairs(focus_events) do
     print(i, e.event, os.date("%H:%M:%S", e.time))
   end
 end
 
-local function focus_gained()
-  print("Huiii Fokus")
-
-  table.insert(focus_events, {
-    time = os.time(),
-    event = "gain",
-  })
-end
-
-local function focus_lost()
-  print("Hokus pokus fort ist der fokus")
-
-  table.insert(focus_events, {
-    time = os.time(),
-    event = "lose",
-  })
-end
 
 local function persist()
-  local filename = ".timer.toml"
-  local username = trim(os.getenv("USER")) .. "_at_" .. trim(io.popen("hostname -s"):read("*a"))
   local today = os.date("%y-%m-%d", os.time())
   local table = {}
 
@@ -109,12 +147,12 @@ local function persist()
 
   -- write time to table
   if table[today] ~= nil and table[today][username] ~= nil then
-    table[today][username] = table[today][username] + time()
+    table[today][username] = table[today][username] + summ_time()
   else
     if table[today] == nil then
       table[today] = {}
     end
-    table[today][username] = time()
+    table[today][username] = summ_time()
   end
 
   -- write table to file
@@ -132,6 +170,19 @@ local function persist()
   focus_events = {}
   focus_gained()
 end
+local function focus_gained()
+  table.insert(focus_events, {
+    time = os.time(),
+    event = "gain",
+  })
+end
+
+local function focus_lost()
+  table.insert(focus_events, {
+    time = os.time(),
+    event = "lose",
+  })
+end
 
 local function setup()
   vim.api.nvim_create_autocmd("VimEnter",
@@ -143,7 +194,7 @@ local function setup()
 
   vim.api.nvim_create_user_command(
     'Timer',      -- The name of the command (accessible via :TimerStart)
-    log_time,
+    log_total_time,
     { nargs = 0 } -- No arguments for this command (you can configure this later)
   )
   vim.api.nvim_create_user_command(