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

        [ResponseType( typeof( void ) )]
        public IHttpActionResult PostFmsMaterialPurchaseRequestMaterial( List<PurchaseRequestMaterial> materials )
        {
            if ( !ModelState.IsValid )
            {
                return BadRequest( ModelState );
            }
            
            Uri uri = Request.RequestUri;
            var uriQuery = HttpUtility.ParseQueryString( uri.Query );
            int siteId, businessFieldId, purchaseRequestId;
            if( int.TryParse( uriQuery.Get( "SiteId" ) , out siteId ) == false ||
                int.TryParse( uriQuery.Get( "BusinessFieldId" ) , out businessFieldId ) == false ||
                int.TryParse( uriQuery.Get( "PurchaseRequestId" ) , out purchaseRequestId ) == false )
            {
                return BadRequest( "Not Found Parameters." );
            }

            var query = from d in db.FmsMaterialPurchaseRequestMaterial
                        where d.SiteId == siteId &&
                              d.BusinessFieldId == businessFieldId &&
                              d.PurchaseRequestId == purchaseRequestId
                        select d;

            var qm = new QueryManager<FmsMaterialPurchaseRequestMaterial>( db );
            try
            {
                qm.DeleteAndInsert( db.FmsMaterialPurchaseRequestMaterial , materials , 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 PurchaseRequestMaterial
    {
        public int SiteId { get; set; }
        public int BusinessFieldId { get; set; }
        public int PurchaseRequestId { get; set; }
        public int MaterialId { get; set; }
        public int MaterialCount { get; set; }
    };
}