Separate timeControl logic into utils/timeControl
[vchess.git] / client / src / data / challengeCheck.js
index 17cf296..e0aa978 100644 (file)
@@ -1,26 +1,4 @@
-
-
-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');
-}
+import { extractTime } from "@/utils/timeControl";
 
 export function checkChallenge(c)
 {
@@ -28,30 +6,11 @@ export function checkChallenge(c)
        if (isNaN(vid) || vid <= 0)
                return "Please select a variant";
 
-  const tcParts = c.timeControl.replace(/ /g,"").split('+');
-       const mainTime = tcParts[0].match(/([0-9]+)([smhd])/);
-  if (!mainTime)
+  const tc = extractTime(c.timeControl);
+  if (!tc)
     return "Wrong time control";
-  const mainTimeValue = parseInt(mainTime[1]);
-  const mainTimeUnit = mainTime[2];
-       if (isNaN(mainTimeValue) || mainTimeValue <= 0)
-               return "Main time should be strictly positive";
-  c.mainTime = timeUnitToSeconds(mainTimeValue, mainTimeUnit);
-  if (tcParts.length >= 2)
-  {
-    const increment = tcParts[1].match(/([0-9]+)([smhd])/);
-    if (!increment)
-      return "Wrong time control";
-    const incrementValue = parseInt(increment[1]);
-    const incrementUnit = increment[2];
-    if (isLargerUnit(incrementUnit, mainTimeUnit))
-      return "Increment unit cannot be larger than main unit";
-    if (isNaN(incrementValue) || incrementValue < 0)
-      return "Increment must be positive";
-    c.increment = timeUnitToSeconds(incrementValue, incrementUnit);
-  }
-  else
-    c.increment = 0;
+  // Less than 3 days ==> live game (TODO: heuristic... 40 moves also)
+  c.liveGame = (tc.mainTime + 40 * tc.increment < 3*24*60*60);
 
        // Basic alphanumeric check for players names
        let playerCount = 0;
@@ -75,6 +34,6 @@ export function checkChallenge(c)
     if (!V.IsGoodFen(c.fen))
       return "Bad FEN string";
   }
-  else //generate a FEN
-    c.fen = V.GenRandInitFen();
+  else
+    c.fen = "";
 }