module Validation open System.Drawing open SmoulderingBeachBall.Domain.DomainTypes open System let colourList = [ "blue", Brushes.AliceBlue; "brown", Brushes.Brown; "black", Brushes.Black; "gray", Brushes.Gray; "green", Brushes.Green; "purple", Brushes.Purple; "red", Brushes.Red; "white", Brushes.White; "yellow", Brushes.Yellow;] |> Map.ofList let isColourValid (colour: string) = colourList |> Map.containsKey (colour.ToLower()) let parseColour colour = match (isColourValid colour) with | true -> colourList |> Map.find (colour.ToLower()) | false -> invalidArg "Colour" (String.Concat("[ERROR] The colour specifed is invalid.\n", "Please use the 'list-colours' command to see what you can use.")) let getDesktopPath = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory) let parsePath (path: string) = match path with | path when ((path.ToLower()).Equals "desktop") -> getDesktopPath | path when ((path.ToLower()).Equals "d") -> getDesktopPath | _ -> path let buildDefaultSpec iWidth iHeight = let oSpec = { colour = Brushes.Black overlayType = Full } let spec = { width = iWidth height = iHeight colour = Brushes.AntiqueWhite filePath = getDesktopPath overlay = Some oSpec } spec let parseOverlay (oType: string) = match oType.ToLower() with | "border" -> Border | "b" -> Border | "full" -> Full | "f" -> Full | _ -> invalidArg "Overlay Type" "The overlay type must be either 'border' or 'full'." let buildOverlaySpec oColour (oType: string) = let oSpec = { colour = parseColour oColour; overlayType = parseOverlay oType } oSpec let buildMainSpec iWidth iHeight mainColour path oSpec = let spec = { width = iWidth; height = iHeight; colour = parseColour mainColour filePath = parsePath path overlay = oSpec } spec let buildSpec iWidth iHeight mainColour oColour (oType: string) path = let spec = match oType.ToLower() with | "none" | "n" -> buildMainSpec iWidth iHeight mainColour path option.None | _ -> let oSpec = buildOverlaySpec oColour oType buildMainSpec iWidth iHeight mainColour path (Some oSpec) spec