{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.1",
  "parameters": {
    "sqlDatabaseEditionTierDtuCapacity": {
      "type": "string",
      "defaultValue": "Basic-Basic-5-2",
      "allowedValues": [
        "Basic-Basic-5-2",
        "Standard-S0-10-250",
        "Standard-S1-20-250",
        "Standard-S2-50-250",
        "Standard-S3-100-250",
        "Standard-S4-200-250",
        "Standard-S6-400-250",
        "Standard-S7-800-250",
        "Standard-S9-1600-250",
        "Standard-S12-3000-250",
        "Premium-P1-125-500",
        "Premium-P2-250-500",
        "Premium-P4-500-500" ,
        "Premium-P6-1000-500",
        "Premium-P11-1750-500-1024",
        "Premium-P15-4000-1024",
        "GeneralPurpose-GP_Gen5_2-2-250",
        "GeneralPurpose-GP_S_Gen5_2-2-250"
      ],
      "metadata": {
        "description": "Describes the database Edition, Tier, Dtu, Gigabytes (Edition-Tier-Dtu-Gigabytes)"
      }
    },
    "sqlServerName": {
      "type": "string",
      "metadata": {
        "description": "The name of the sql server. It has to be unique."
      }
    },
    "sqlDatabaseName": {
      "type": "string",
      "metadata": {
        "description": "The name of the sql databaseName. It has to be unique."
      }
    },
    "sqlAdministratorLogin": {
      "type": "string",
      "metadata": {
        "description": "The admin user of the SQL Server"
      }
    },
    "sqlAdministratorLoginPassword": {
      "type": "securestring",
      "metadata": {
        "description": "The password of the admin user of the SQL Server"
      }
    },
    "BlazorWebsiteName": {
      "type": "string",
      "metadata": {
        "description": "The name of the website. It has to be unique."
      }
    },
    "BlazorSKU": {
      "type": "string",
      "allowedValues": [
        "F1",
        "D1",
        "B1",
        "B2",
        "B3",
        "S1",
        "S2",
        "S3",
        "P1",
        "P2",
        "P3",
        "P4"
      ],
      "defaultValue": "B1"
    },
    "BlazorSKUCapacity": {
      "type": "int",
      "defaultValue": 1,
      "maxValue": 3,
      "minValue": 1,
      "metadata": {
        "description": "Describes plan's instance count"
      }
    },
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]",
      "metadata": {
        "description": "Location for all resources."
      }
    }
  },
  "variables": {
    "hostingPlanName": "[concat('Oqtane-hostingplan-', uniqueString(resourceGroup().id))]",
    "databaseCollation": "SQL_Latin1_General_CP1_CI_AS",
    "databaseEditionTierDtuCapacity": "[split(parameters('sqlDatabaseEditionTierDtuCapacity'),'-')]",
    "databaseEdition": "[variables('databaseEditionTierDtuCapacity')[0]]",
    "databaseTier": "[variables('databaseEditionTierDtuCapacity')[1]]",
    "databaseDtu": "[if(greater(length(variables('databaseEditionTierDtuCapacity')), 2), variables('databaseEditionTierDtuCapacity')[2], '')]",
    "databaseMaxSizeGigaBytes":"[if(greater(length(variables('databaseEditionTierDtuCapacity')), 3), variables('databaseEditionTierDtuCapacity')[3], '')]",
    "databaseServerlessTiers": [
            "GP_S_Gen5_2"
        ]
  },
  "resources": [
    {
      "type": "Microsoft.Sql/servers",
      "apiVersion": "2021-11-01",
      "name": "[parameters('sqlServerName')]",
      "location": "[parameters('location')]",
      "tags": {
        "displayName": "SQL Server"
      },
      "properties": {
        "administratorLogin": "[parameters('sqlAdministratorLogin')]",
        "administratorLoginPassword": "[parameters('sqlAdministratorLoginPassword')]",
        "version": "12.0"
      }
    },
    {
      "type": "Microsoft.Sql/servers/databases",
      "apiVersion": "2021-11-01",
      "name": "[format('{0}/{1}', parameters('sqlServerName'), parameters('sqlDatabaseName'))]",
      "location": "[parameters('location')]",
      "tags": {
        "displayName": "Database"
      },
      "sku": {
        "name": "[if(equals(variables('databaseEdition'), 'GeneralPurpose'), variables('databaseTier'), variables('databaseEdition'))]",
        "tier": "[variables('databaseEdition')]",
        "capacity": "[if(equals(variables('databaseDtu'), ''), json('null'), int(variables('databaseDtu')))]" 
      },
      "kind": "[concat('v12.0,user,vcore',if(contains(variables('databaseServerlessTiers'),variables('databaseTier')),',serverless',''))]",
      "properties": {
        "edition": "[variables('databaseEdition')]",
        "collation": "[variables('databaseCollation')]",
        "maxSizeBytes": "[if(equals(variables('databaseMaxSizeGigaBytes'), ''), json('null'), mul(mul(mul(int(variables('databaseMaxSizeGigaBytes')),1024),1024),1024))]",
        "requestedServiceObjectiveName": "[variables('databaseTier')]"
        
      },
      "dependsOn": [
        "[resourceId('Microsoft.Sql/servers', parameters('sqlserverName'))]"
      ]
    },
    {
      "type": "Microsoft.Sql/servers/firewallRules",
      "apiVersion": "2021-11-01",
      "name": "[format('{0}/{1}', parameters('sqlServerName'), 'AllowAllWindowsAzureIps')]",
      "properties": {
        "endIpAddress": "0.0.0.0",
        "startIpAddress": "0.0.0.0"
      },
      "dependsOn": [
        "[resourceId('Microsoft.Sql/servers', parameters('sqlServerName'))]"
      ]
    },
    {
      "name": "[variables('hostingPlanName')]",
      "type": "Microsoft.Web/serverfarms",
      "location": "[resourceGroup().location]",
      "apiVersion": "2022-09-01",
      "dependsOn": [],
      "tags": {
        "displayName": "Blazor"
      },
      "sku": {
        "name": "[parameters('BlazorSKU')]",
        "capacity": "[parameters('BlazorSKUCapacity')]"
      },
      "properties": {
        "name": "[variables('hostingPlanName')]",
        "numberOfWorkers": 1
      }
    },
    {
      "apiVersion": "2018-02-01",
      "name": "[parameters('BlazorWebsiteName')]",
      "type": "Microsoft.Web/sites",
      "location": "[parameters('location')]",
      "dependsOn": [
        "[variables('hostingPlanName')]"
      ],
      "tags": {
        "[concat('hidden-related:', resourceId('Microsoft.Web/serverfarms', variables('hostingPlanName')))]": "empty",
        "displayName": "Website"
      },
      "properties": {
        "name": "[parameters('BlazorWebsiteName')]",
        "serverFarmId": "[resourceId('Microsoft.Web/serverfarms', variables('hostingPlanName'))]",
        "siteConfig": {
          "webSocketsEnabled": true,
          "netFrameworkVersion": "v5.0"
        }
      },
      "resources": [
        {
          "type": "sourcecontrols",
          "apiVersion": "2018-02-01",
          "name": "web",
          "location": "[parameters('location')]",
          "dependsOn": [
            "[resourceId('Microsoft.Web/sites', parameters('BlazorWebsiteName'))]"
            //"[resourceId('Microsoft.Web/Sites/config', parameters('BlazorWebsiteName'), 'connectionstrings')]"
          ],
          "properties": {
            "RepoUrl": "https://github.com/oqtane/oqtane.framework.git",
            "branch": "master",
            "IsManualIntegration": true
          }
        }
      ]
    }
  ]
}