{
    "$schema": "http://json-schema.org/draft-07/schema#",
    "$id": "https://raw.githubusercontent.com/flxblio/sfp/develop/packages/sfp-cli/resources/schemas/pooldefinition.schema.json",
    "title": "pool definition",
    "description": "The definition for creating a pool of scratch orgs in sfp",
    "type": "object",
    "required": ["tag", "maxAllocation"],
    "additionalProperties": false,
    "properties": {
        "$schema": {
            "description": "Support editors like vscode to help with IntelliSense",
            "type": "string",
            "default": "https://raw.githubusercontent.com/flxblio/sfp/develop/packages/sfp-cli/resources/schemas/pooldefinition.schema.json"
        },
        "tag": {
            "title": "Tag of the pool",
            "description": "Tag or name to identify the scratch org pool",
            "type": "string"
        },
        "waitTime": {
            "title": "wait time",
            "description": "Time to wait for scratch org creation in minutes (default:6 mins)",
            "type": "integer",
            "default": 6
        },
        "expiry": {
            "title": "expiry",
            "description": "Duration of the scratch org (in days) (default:2)",
            "type": "integer",
            "default": 2
        },
        "maxAllocation": {
            "title": "Max number of scratch orgs to be allocated",
            "description": "Maximum number of scratch orgs to be allocated in the pool",
            "type": "integer"
        },
        "batchSize": {
            "title": "Batch Size",
            "description": "Control the parallelism of the pool creation (default:5)",
            "type": "integer",
            "default": 5
        },
        "configFilePath": {
            "title": "Path to config file",
            "description": "Reference an external .json file to specify the features and org preferences required for the metadata of your package, such as the scratch org definition.",
            "type": "string",
            "default": "config/project-scratch-def.json"
        },
        "releaseConfigFile": {
            "title": "Path to release config file",
            "description": "Path to the config file which determines how a release definition should be generated, enable this for pools to use this release config to only utilize artifacts described the releae config",
            "type": "string"
        },
        "succeedOnDeploymentErrors": {
            "title": "Succeed on Deployment Errors",
            "description": "In case of a deployment error, whether to keep that scratch org in the pool",
            "type": "boolean",
            "default": true
        },
        "installAll": {
            "title": "Install all packages",
            "description": "Install all package artifacts, in addition to the managed package dependencies",
            "type": "boolean",
            "default": false
        },
        "enableVlocity": {
            "title": "Enable vlocity config deployment",
            "description": "[alpha] Enable vlocity settings and config deployment. Please note it doesnt install vlocity managed package",
            "type": "boolean",
            "default": "false"
        },
        "enableSourceTracking": {
            "title": "Enable source tracking",
            "description": "Enable source tracking by deploying packages using source:push , and persisting local source tracking files",
            "type": "boolean",
            "default": true
        },
        "relaxAllIPRanges": {
            "title": "Relax all IP Ranges",
            "description": "Relax all IP addresses to enable developers to login to scratch orgs",
            "type": "boolean",
            "default": "false"
        },
        "ipRangesToBeRelaxed": {
            "title": "IP ranges to be relaxed",
            "description": "Relax IP address of developers to allow access to scratch orgs",
            "type": "array"
        },
        "retryOnFailure": {
            "title": "Retry on failure",
            "description": "Retry installation of packages on failed deployment",
            "type": "boolean",
            "default": "false"
        },
        "maxRetryCount": {
            "title": "Max Retry Count",
            "description": "Maximum number of attempts sfp should retry installation of packages on failed deployment",
            "type": "number",
            "default": "2"
        },
        "snapshotPool": {
            "title": "Snapshot Pool",
            "description": "Use a pre-prepared pool to further add packages on top of it",
            "type": "string"
        },
        "postDeploymentScriptPath": {
            "title": "Post Script",
            "description": "Execute a custom script after all the artifacts are deployed into a particular org",
            "type": "string"
        },
        "preDependencyInstallationScriptPath": {
            "title": "Pre Script",
            "description": "Execute a custom script before denpendencies install into a particular org",
            "type": "string"
        },
        "disableSourcePackageOverride": {
            "title": "Disable installation of unlocked packages as source package",
            "description": "Prepare by default utilizes source package for installing unlocked packages to the scratchorg, disabling this flag will allow to install it ",
            "type": "boolean",
            "default":false
        },
        "noAnchestors": {
            "title": "Disable second-generation managed package (2GP) ancestors in the scratch org.",
            "description": "Don't include second-generation managed package (2GP) ancestors in the scratch org when set to true",
            "type": "boolean",
            "default":false
        },
        "fetchArtifacts": {
            "title": "Fetch Artifacts using below mechanism",
            "description": "Fetch artifacts from artifact registry using below mechanism",
            "type": "object",
            "oneOf": [{ "required": ["artifactFetchScript"] }, { "required": ["npm"] }],
            "properties": {
                "artifactFetchScript": {
                    "title": "Path to the script for fetching artifacts",
                    "description": "Path to Shell script that handles fetching artifacts from a registry",
                    "type": "string"
                },
                "npm": {
                    "type": "object",
                    "required": ["scope"],
                    "properties": {
                        "scope": {
                            "title": "Scope of NPM packages",
                            "description": "Scope of NPM packages",
                            "type": "string"
                        }
                    }
                }
            }
        }
    }
}
