/// <summary>
        /// Create new spreadsheet file for a given google account, and write data inside the speadsheet
        /// </summary>
        /// <param name="authorizationTokenId"></param>
        /// <param name="spreadsheetName"></param>
        /// <param name="worksheetName"></param>
        /// <param name="tableData"></param>
        /// <returns></returns>
        public async Task <string> CreateNewSpreadsheet(Guid authorizationTokenId, string spreadsheetName, string worksheetName, StandardTableDataCM tableData)
        {
            var googleSheetApi         = new GoogleSheet(new GoogleIntegration(ObjectFactory.GetInstance <IRestfulServiceClient>()), new GoogleDrive());
            var defaultGoogleAuthToken = GetGoogleAuthToken(authorizationTokenId);
            var spreadsheetId          = await googleSheetApi.CreateSpreadsheet(spreadsheetName, defaultGoogleAuthToken);

            var googleSheets = await googleSheetApi.GetSpreadsheets(defaultGoogleAuthToken);

            var spreadsheetUri = googleSheets.FirstOrDefault(x => x.Value == spreadsheetName).Key;
            //create worksheet for this new created spreadsheet
            var existingWorksheets = await googleSheetApi.GetWorksheets(spreadsheetUri, defaultGoogleAuthToken);

            var existingWorksheetUri = existingWorksheets.Where(x => string.Equals(x.Value.Trim(), worksheetName, StringComparison.InvariantCultureIgnoreCase))
                                       .Select(x => x.Key).FirstOrDefault();

            if (string.IsNullOrEmpty(existingWorksheetUri))
            {
                existingWorksheetUri = await googleSheetApi.CreateWorksheet(spreadsheetUri, defaultGoogleAuthToken, worksheetName);
            }

            await googleSheetApi.WriteData(spreadsheetUri, existingWorksheetUri, tableData, defaultGoogleAuthToken);

            return(spreadsheetId);
        }