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 FmsWorkResultCheckItemMaterialController : ApiController
    {
        private iBemsEntities db = new iBemsEntities();

        // POST: api/FmsWorkResultCheckItemMaterial
        [ResponseType( typeof( void ) )]
        [ActionName("Update")]
        public IHttpActionResult PostFmsWorkResultCheckItemMaterial( List<WorkResultCheckItemMaterial> workResultCheckItemMaterials )
        {
            if ( !ModelState.IsValid )
            {
                return BadRequest( ModelState );
            }
            
            Uri uri = Request.RequestUri;
            var uriQuery = HttpUtility.ParseQueryString( uri.Query );
            int siteId, workRequestId, businessFieldId , checkItemId;
            if( int.TryParse( uriQuery.Get( "SiteId" ) , out siteId ) == false ||
                int.TryParse(uriQuery.Get("WorkRequestId"), out workRequestId) == false ||
                int.TryParse(uriQuery.Get("BusinessFieldId"), out businessFieldId) == false ||
                int.TryParse(uriQuery.Get("CheckItemId"), out checkItemId) == false)
            {
                return BadRequest( "Not Found Parameters." );
            }

            var query = from d in db.FmsWorkResultCheckItemMaterial
                        where d.SiteId == siteId &&
                              d.WorkRequestId == workRequestId &&
                              d.CheckItemId == checkItemId
                        select d;

            var qm = new QueryManager<FmsWorkResultCheckItemMaterial>(db);
            try
            {
                qm.DeleteAndInsert(db.FmsWorkResultCheckItemMaterial, workResultCheckItemMaterials, query);

            }
            catch (DbUpdateException e) { throw e; }
            
            return StatusCode( HttpStatusCode.NoContent );
        }

        // POST: api/FmsWorkResultCheckItemMaterial
        [ResponseType(typeof(void))]
        [ActionName("Approval")]
        public IHttpActionResult PostFmsWorkResultCheckItemMaterialApproval(List<WorkResultCheckItemMaterial> workResultCheckItemMaterials)
        {
            if (!ModelState.IsValid)
            {
                return BadRequest(ModelState);
            }

            Uri uri = Request.RequestUri;
            var uriQuery = HttpUtility.ParseQueryString(uri.Query);
            int siteId, workRequestId, businessFieldId, checkItemId;
            if (int.TryParse(uriQuery.Get("SiteId"), out siteId) == false ||
                int.TryParse(uriQuery.Get("WorkRequestId"), out workRequestId) == false ||
                int.TryParse(uriQuery.Get("BusinessFieldId"), out businessFieldId) == false ||
                int.TryParse(uriQuery.Get("CheckItemId"), out checkItemId) == false)
            {
                return BadRequest("Not Found Parameters.");
            }

            var query = from d in db.FmsWorkResultCheckItemMaterial
                        where d.SiteId == siteId
                              &&  d.WorkRequestId == workRequestId 
                              // && d.CheckItemId == checkItemId
                        select d;

            var qm = new QueryManager<FmsWorkResultCheckItemMaterial>(db);
            try
            {
                qm.DeleteAndInsert(db.FmsWorkResultCheckItemMaterial, workResultCheckItemMaterials, query);

            }
            catch (DbUpdateException e) { throw e; }

            return StatusCode(HttpStatusCode.NoContent);
        }

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

    }

    public class WorkResultCheckItemMaterial
    {
        public int SiteId { get; set; }
        //public int BusinessFieldId { get; set; }
        public int WorkRequestId { get; set; }
        public int MaterialId { get; set; }
        public int MaterialCount { get; set; }
        public int CheckItemId { get; set; }
        public string MaterialCode { get; set; }
        public string Name { get; set; }
    };
}