using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text.RegularExpressions;
using Telerik.Sitefinity.Libraries.Model;
using Telerik.Sitefinity.Modules.Libraries;
using Telerik.Sitefinity.Workflow;

namespace Telerik.Sitefinity.Documentation.CodeSnippets.DevGuide.SitefinityEssentials.Modules.MediaModules.Images
{
    public partial class ImageSnippets
    {
        public void ModifyImageNativeAPI(Guid masterImageId, string newTitle, Stream imageStream, string imageFileName, string imageExtension)
        {
            LibrariesManager librariesManager = LibrariesManager.GetManager();

            //Get the master version.
            Image master = librariesManager.GetImages().Where(i => i.Id == masterImageId).FirstOrDefault();

            if (master != null)
            {
                //Check out the master to get a temp version.
                Image temp = librariesManager.Lifecycle.CheckOut(master) as Image;

                //Make the modifications to the temp version.
                temp.Title = newTitle;
                temp.LastModified = DateTime.UtcNow;
                temp.UrlName = Regex.Replace(newTitle.ToLower(), @"[^\w\-\!\$\'\(\)\=\@\d_]+", "-");
                temp.MediaFileUrlName = Regex.Replace(imageFileName.ToLower(), @"[^\w\-\!\$\'\(\)\=\@\d_]+", "-");
                
                librariesManager.Upload(temp, imageStream, imageExtension);
                librariesManager.RecompileItemUrls(temp);

                //Checkin the temp and get the updated master version.
                //After the check in the temp version is deleted.
                master = librariesManager.Lifecycle.CheckIn(temp) as Image;

                librariesManager.SaveChanges();

                //Publish the image.
                var bag = new Dictionary<string, string>();
                bag.Add("ContentType", typeof(Image).FullName);
                WorkflowManager.MessageWorkflow(masterImageId, typeof(Image), null, "Publish", false, bag);
            }
        }
    }
}