using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Entity;
using System.Data.Entity.Infrastructure;
using System.Diagnostics;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web;
using System.Web.Http;
using System.Web.Http.Description;
using DevExpress.XtraCharts.Native;
using DevExpress.XtraPrinting.Native;
using iBemsDataService;
using iBemsDataService.Model;
using iBemsDataService.Util;

namespace iBemsDataService.Controllers
{
    public class FmsConstructionEstimationController : ApiController
    {
        private iBemsEntities db = new iBemsEntities();


        [ResponseType(typeof(void))]
        public IHttpActionResult PostFmsConstructionEstimation(FmsConstructionEstimation estimateInfo)
        {
            Uri uri = Request.RequestUri;
            var uriQuery = HttpUtility.ParseQueryString(uri.Query);
            int siteId, constructionId;

            if (int.TryParse(uriQuery.Get("SiteId"), out siteId) == false ||
                int.TryParse(uriQuery.Get("ConstructionId"), out constructionId) == false)
            {
                return BadRequest("Not Found Parameters.");
            }

            try
            {
                estimateInfo.TotalEstimateScore = estimateInfo.AbilityScore + estimateInfo.SafetyScore + estimateInfo.ServiceScore;

                db.FmsConstructionEstimation.Add(estimateInfo);

                var construction = db.FmsConstruction.Where(c =>
                    c.SiteId == siteId &&
                    c.ConstructionId == constructionId
                ).FirstOrDefault();

                if (construction == null) { return StatusCode(HttpStatusCode.NoContent); }

                construction.ProgressId = 4;
                construction.UpdateDate = DateTime.Now;

                db.SaveChanges();

            }
            catch (DbUpdateException e) { throw e; }

            return StatusCode(HttpStatusCode.NoContent);
        }

        protected override void Dispose(bool disposing)
        {
            if (disposing)
            {
                db.Dispose();
            }
            base.Dispose(disposing);
        }

    }


}