using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Disco.Models.ClientServices;
using System.Web;
using Disco.Data.Repository;
using Disco.Models.Repository;

namespace Disco.BI.Extensions
{
    public static class ClientServicesExtensions
    {
        public static EnrolResponse BuildResponse(this Enrol request)
        {
            if (HttpContext.Current == null)
                throw new PlatformNotSupportedException("This function can only be accessed from within ASP.NET");

            string username = null;
            if (HttpContext.Current.Request.IsAuthenticated)
                username = HttpContext.Current.User.Identity.Name;

            using (DiscoDataContext dbContext = new DiscoDataContext())
            {
                EnrolResponse response = DeviceBI.DeviceEnrol.Enrol(dbContext, username, request);
                dbContext.SaveChanges();
                return response;
            }
        }

        public static WhoAmIResponse BuildResponse(this WhoAmI request)
        {
            if (HttpContext.Current == null)
                throw new PlatformNotSupportedException("This function can only be accessed from within ASP.NET");

            string username = null;
            if (HttpContext.Current.Request.IsAuthenticated)
                username = HttpContext.Current.User.Identity.Name;

            if (username == null)
                throw new InvalidOperationException("Unauthenticated Http Context");

            using (DiscoDataContext dbContext = new DiscoDataContext())
            {
                User user = UserBI.UserCache.GetUser(username, dbContext, true);
                WhoAmIResponse response = new WhoAmIResponse()
                {
                    Username = user.Id,
                    DisplayName = user.DisplayName,
                    Type = user.Type
                };
                return response;
            }
        }

        public static MacEnrolResponse BuildResponse(this MacEnrol request)
        {
            if (HttpContext.Current == null)
                throw new PlatformNotSupportedException("This function can only be accessed from within ASP.NET");

            using (DiscoDataContext dbContext = new DiscoDataContext())
            {
                MacEnrolResponse response = DeviceBI.DeviceEnrol.MacEnrol(dbContext, request, false);
                dbContext.SaveChanges();
                return response;
            }
        }

    }
}
