public SiteCollectionManager(ActionRequest actionRequest, ClientContext ctx)
 {
     _actionRequest = actionRequest;
     _siteCollectionRequest = actionRequest.SiteCollectionRequest;
     _ctx = ctx;
     _siteTemplate =  GetSiteTemplate();
 }
        public async Task SiteTemplateRepositoryReadTest()
        {

            var template = new SiteTemplate
            {
                Name = "test",
                Description = "test"
            };


            await _target.Insert(template);

            var template2 = new SiteTemplate
            {
                Name = "test2",
                Description = "test2"
            };


            await _target.Insert(template2);


            var templates = await _target.GetSiteTemplates();
            Assert.IsTrue(templates.Count() >= 2);

            await _target.Delete(template);
            await _target.Delete(template2);
        }
        public async Task Delete(SiteTemplate template)
        {
            var client = await GetDocumentDbClient();
            var templateToDelete = client.CreateDocumentQuery<Document>(DocumentCollection.DocumentsLink).Where(d => d.Id == template.Name).AsEnumerable().FirstOrDefault();

            if (templateToDelete != null)
                await client.DeleteDocumentAsync(templateToDelete.SelfLink);
        }
        public async Task Insert(SiteTemplate template)
        {
            var client = await GetDocumentDbClient();
            var document = client.CreateDocumentQuery("dbs/" + DocumentDbId + "/colls/" + _collectionId).Where(d => d.Id == template.Id.ToString()).AsEnumerable().FirstOrDefault();

            if (document == null)
            {           
                await client.CreateDocumentAsync("dbs/" + DocumentDbId + "/colls/" + _collectionId, template);
            }
        }
        public void LoadTestDataInDocumentDb()
        {
            //todo create testdata files
            var template = new SiteTemplate
            {
                Name = "test",
                Description = "test"
            };

            _target.Insert(template).Wait(); ;
            Assert.IsTrue(true);
        }
        public async Task SiteTemplateRepositoryInsertTest()
        {
            var template = new SiteTemplate
            {
                Name = "test",
                Description = "test"
            };

            await _target.Insert(template);

            var templates = await _target.GetSiteTemplates();
            var siteCreationTemplate = templates.Where(v => v.Name == template.Name);

            Assert.IsNotNull(siteCreationTemplate);

            await _target.Delete(template);
        }
        public bool AllFilesAvailable(SiteTemplate siteTemplate)
        {

            var colorFileAvailable =  _templateFilesBlobRepository.CheckFile(siteTemplate.PnpTemplate.ComposedLook.ColorFile);
            var backgroundFileAvailable =  _templateFilesBlobRepository.CheckFile(siteTemplate.PnpTemplate.ComposedLook.BackgroundFile);
            var fontFileAvailable =  _templateFilesBlobRepository.CheckFile(siteTemplate.PnpTemplate.ComposedLook.FontFile);
            var siteLogoUrlAvailable =  _templateFilesBlobRepository.CheckFile(siteTemplate.PnpTemplate.ComposedLook.SiteLogo);

            var customActions = siteTemplate.PnpTemplate.CustomActions.SiteCustomActions.Concat(siteTemplate.PnpTemplate.CustomActions.WebCustomActions);

            var sourcesAvailable = false;
            foreach (var customAction in customActions)
            {
                sourcesAvailable =  _templateFilesBlobRepository.CheckFile(customAction.ScriptSrc);
            }

            return colorFileAvailable != false &&
                backgroundFileAvailable != false &&
                fontFileAvailable != false &&
                siteLogoUrlAvailable != false && 
                sourcesAvailable != false;
        }
 public async Task Update(SiteTemplate oldTemplate, SiteTemplate newTemplate)
 {
     await Delete(oldTemplate);
     await Insert(newTemplate);
 }
 public async Task<ActionResult> DeleteSiteTemplate(SiteTemplate templ)
 {
     
     await _siteTemplateService.Delete(templ);
     
     return Redirect("/SiteTemplate/Index?" + SharePointContext.CloneQueryString(HttpContext.Request));
 }
        public async Task<ActionResult> EditSiteTemplate(SiteTemplate model)
        {
            await _siteTemplateService.Insert(model);

            return Redirect("Index?" + SharePointContext.CloneQueryString(HttpContext.Request));
        }
        public async Task<ActionResult> Create(SiteTemplateViewModel model)
        {
            var pnpFile = await _pnpFileService.Read(model.PnpFileGuid);
            if (pnpFile.PnpTemplate == null)
            {
                return RedirectToAction("PickFile", new { SPHostUrl = Request.QueryString["SPHostUrl"] });
            }


            pnpFile.PnpTemplate.ComposedLook.BackgroundFile = model.FileBgBlobLocation;
            pnpFile.PnpTemplate.ComposedLook.SiteLogo = model.LogoBlobLocation;
            pnpFile.PnpTemplate.ComposedLook.ColorFile= model.FileClrBlobLocation;
            pnpFile.PnpTemplate.ComposedLook.FontFile = model.FontBlobLocation ;

            var siteTemplate = new SiteTemplate
            {
                Id = Guid.NewGuid(),
                Name = model.SiteTemplateName,
                Description = model.Description,
                PnpTemplate = pnpFile.PnpTemplate,
                CreationTimeStamp = DateTime.Now
            };

            await _siteTemplateService.Insert(siteTemplate);

            return RedirectToAction("Index", new { SPHostUrl = Request.QueryString["SPHostUrl"] });
        }
        public async Task Delete(SiteTemplate siteTemplate)
        {
            await  _siteTemplateRepository.Delete(siteTemplate);

        }
        public async Task Update(SiteTemplate newSiteTemplate, SiteTemplate oldSiteTemplate)
        {
            await _siteTemplateRepository.Update(newSiteTemplate, oldSiteTemplate);

        }
        public async Task Insert(SiteTemplate siteTemplate)
        {
            await _siteTemplateRepository.Insert(siteTemplate);

        }