﻿using System.Linq;
using System.Web.Mvc;
using Composite.AspNet.MvcFunctions;
using Composite.AspNet.MvcFunctions.Routing;
using Composite.Core.Linq;
using Composite.Core.Routing.Foundation.PluginFacades;
using Composite.Data;

namespace Composite.Demo
{
    [C1Function(Namespace = "Demo", Name="Car")]
    public class CarController: Controller
    {
        public ActionResult Index()
        {
            var cars = DataFacade.GetData<ICar>().ToList();

            return View(cars);
        }

        [GlobalUrlMapper(typeof(ICar), "c5383680-45b7-4a96-9f8d-be4910522221")]
        public ActionResult Details(string id)
        {
            var car = DataFacade.GetData<ICar>().FirstOrDefault(p => p.Id == id);

            return car == null ? (ActionResult) HttpNotFound() : View(car);
        }

        [GlobalUrlMapper(typeof(ICar), "c5383680-45b7-4a96-9f8d-be4910522221", "Name")]
        public ActionResult DetailsByName(string id)
        {
            string name = id;

            var product = DataFacade.GetData<ICar>().Evaluate().FirstOrDefault(p => LabelToUrlPart(p.Name) == name);

            return product == null ? (ActionResult)HttpNotFound() : View("Details", product);
        }

        private static string LabelToUrlPart(string partnerName)
        {
            return UrlFormattersPluginFacade.FormatUrl(partnerName, true);
        }
    }
}
