using System;
using System.Web.Mvc;
using System.Collections.Generic;

namespace Lightcast.Web.Areas.Administrator.Controllers {
public class AspectsController : Controller {
/// <summary>
/// The dependency injected service bus
/// </summary>
private readonly Lightcast.Infrastructure.IBus Bus;

/// <summary>
/// Construct a new controller with the dependencies injected by Ninject.
/// </summary>
/// <param name="Bus">
/// The <see cref="Lightcast.Infrastructure.IBus"/> injected.
/// </param>
public AspectsController(Lightcast.Infrastructure.IBus Bus) {
this.Bus = Bus;
}

/// <summary>
/// Edit an aspect.
/// </summary>
/// <param name="id">The unique identity of the aspect to edit.</param>
/// <returns></returns>
public ActionResult Edit(Guid? id) {
// if the given id is empty, then we will simply edit a new model
if (id == Guid.Empty || !id.HasValue)
return View(new Lightcast.Presentation.Models.Aspect {
Properties = new List<Lightcast.Presentation.Models.Property> {
}
});

return View();
}

[HttpPost]
public ActionResult Edit([FromJson] Lightcast.Presentation.Models.Aspect model) {
return Json(model.ToJson(), JsonRequestBehavior.AllowGet);
}
}
}

namespace System.Web.Mvc {
public class FromJsonAttribute : CustomModelBinderAttribute {
private readonly static System.Web.Script.Serialization.JavaScriptSerializer serializer =
new System.Web.Script.Serialization.JavaScriptSerializer();

public override IModelBinder GetBinder() {
return new JsonModelBinder();
}

private class JsonModelBinder : IModelBinder {
public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) {
var stringified = controllerContext.HttpContext.Request[bindingContext.ModelName];
if (string.IsNullOrEmpty(stringified))
return null;
return serializer.Deserialize(stringified, bindingContext.ModelType);
}
}
}
}