Separate timeControl logic into utils/timeControl
[vchess.git] / client / src / utils / timeControl.js
diff --git a/client/src/utils/timeControl.js b/client/src/utils/timeControl.js
new file mode 100644 (file)
index 0000000..c4a2295
--- /dev/null
@@ -0,0 +1,46 @@
+function timeUnitToSeconds(value, unit)
+{
+  let seconds = value;
+  switch (unit)
+  {
+    case 'd':
+      seconds *= 24;
+    case 'h':
+      seconds *= 60;
+    case 'm':
+      seconds *= 60;
+  }
+  return seconds;
+}
+
+function isLargerUnit(unit1, unit2)
+{
+  return (unit1 == 'd' && unit2 != 'd')
+    || (unit1 == 'h' && ['s','m'].includes(unit2))
+    || (unit1 == 'm' && unit2 == 's');
+}
+
+export function extractTime(timeControl)
+{
+  const tcParts = timeControl.replace(/ /g,"").split('+');
+       const mainTimeArray = tcParts[0].match(/([0-9]+)([smhd])/);
+  if (!mainTimeArray)
+    return null;
+  const mainTimeValue = parseInt(mainTimeArray[1]);
+  const mainTimeUnit = mainTimeArray[2];
+  const mainTime = timeUnitToSeconds(mainTimeValue, mainTimeUnit);
+  let increment = 0;
+  if (tcParts.length >= 2)
+  {
+    const increment = tcParts[1].match(/([0-9]+)([smhd])/);
+    if (!increment)
+      return null;
+    const incrementValue = parseInt(increment[1]);
+    const incrementUnit = increment[2];
+    // Increment unit cannot be larger than main unit:
+    if (isLargerUnit(incrementUnit, mainTimeUnit))
+      return null;
+    increment = timeUnitToSeconds(incrementValue, incrementUnit);
+  }
+  return {mainTime:mainTime, increment:increment};
+}