﻿using System;
using System.Collections.Generic;
using System.Web;
using Composite.Core;
using Composite.Core.Application;
using Composite.Azure.Publisher;
using Composite.Azure.Publisher.Extensions;
using System.Text;
using System.IO;

namespace SampleAzurePublisherPlugin
{
    [ApplicationStartup]
    public class MyAppStartup
    {
        public static void OnBeforeInitialize()
        {
            Log.LogInformation("MyAppStartup", "About to get initialized");
        }

        public static void OnInitialized()
        {
            Log.LogInformation("MyAppStartup", "Already initialized");

            PublishEvents.BeforePublishEvent += PluginFacade_BeforePublishEvent;
            PublishEvents.AfterPublishEvent += PluginFacade_AfterPublishEvent;

            ContentFilter filter = (stream, path) =>
            {
                if (path.EndsWith(".css") || path.EndsWith(".less"))
                {
                    using (stream)
                    {
                        // make all black colors pink in css / less files
                        Log.LogInformation("PUBLISHER", path);

                        StreamReader reader = new StreamReader(stream);
                        string text = reader.ReadToEnd();
                        text = text.Replace("#000000", "pink");
                        text = text.Replace("#000", "pink");
                        text = text.Replace("black", "pink");

                        MemoryStream outStream = new MemoryStream();
                        StreamWriter writer = new StreamWriter(outStream);
                        writer.Write(text);
                        writer.Flush();
                        outStream.Position = 0;
                        return outStream;
                    }
                }
                else
                {
                    //Do no transformations
                    Log.LogVerbose("PUBLISHER", path);
                    return stream;
                }
            };

            ContentFiltering.RegisterContentFilter(filter);
        }

        static void PluginFacade_AfterPublishEvent(PublishEventArgs e)
        {
            if (e.StagingPublish)
            {
                //The publish to staging was clicking in advanced menu
            }
            Log.LogCritical("PUBLISHER PLUGIN", "PUBLISH STARTED");
        }

        static void PluginFacade_BeforePublishEvent(PublishEventArgs e)
        {
            Log.LogCritical("PUBLISHER PLUGIN", "PUBLISH FINISHED");
        }
    }
}


