using System;
using System.Collections;
using System.Collections.Generic;
using System.Data.Entity;
using System.Data.Entity.Infrastructure;
using System.Linq;
using System.Net;
using System.Web;
using System.Web.Http;
using System.Web.Http.Description;
using DevExpress.Office.Utils;
using iBemsDataService.Model;
using iBemsDataService.Util;
using System.Transactions;
using System.Diagnostics;

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

        [ResponseType(typeof(void))]
        [ActionName("Remove")]
        public IHttpActionResult PostFmsWorkHistoryRemove(FmsWorkHistory workRequest)
        {
            if (!ModelState.IsValid)
            {
                return BadRequest(ModelState);
            }
            try
            {
                using (var transaction = new TransactionScope())
                {
                    var tempSiteId = workRequest.SiteId;
                    var tempWorkRequestId = workRequest.WorkRequestId;

                    var foundQuery = db.FmsWorkResultCheckItemMaterial.Where(x =>
                       x.SiteId == tempSiteId &&
                       x.WorkRequestId == tempWorkRequestId);
                    foreach (var deleteItem in foundQuery)
                    {
                        db.FmsWorkResultCheckItemMaterial.Remove(deleteItem);
                    }

                    var foundQuery1 = db.FmsWorkResultCheckItem.Where(x =>
                       x.SiteId == tempSiteId &&
                       x.WorkRequestId == tempWorkRequestId);
                    foreach (var deleteItem in foundQuery1)
                    {
                        db.FmsWorkResultCheckItem.Remove(deleteItem);
                    }

                    var foundQuery2 = db.FmsWorkResultFile.Where(x =>
                       x.SiteId == tempSiteId &&
                       x.WorkRequestId == tempWorkRequestId);
                    foreach (var deleteItem in foundQuery2)
                    {
                        db.FmsWorkResultFile.Remove(deleteItem);
                    }

                    var foundQuery3 = db.FmsWorkResultLaw.Where(x =>
                       x.SiteId == tempSiteId &&
                       x.WorkRequestId == tempWorkRequestId);
                    foreach (var deleteItem in foundQuery3)
                    {
                        db.FmsWorkResultLaw.Remove(deleteItem);
                    }

                    var foundQuery4 = db.FmsWorkResultToFacility.Where(x =>
                       x.SiteId == tempSiteId &&
                       x.WorkRequestId == tempWorkRequestId);
                    foreach (var deleteItem in foundQuery4)
                    {
                        db.FmsWorkResultToFacility.Remove(deleteItem);
                    }

                    var foundQuery10 = db.FmsMaterialRelease.Where(x =>   //추가
                      x.SiteId == tempSiteId &&
                      x.WorkRequestId == tempWorkRequestId);
                    foreach (var deleteItem in foundQuery10)
                    {
                        db.FmsMaterialRelease.Remove(deleteItem);
                    }
                    var foundQuery5 = db.FmsWorkResult.Where(x =>
                       x.SiteId == tempSiteId &&
                       x.WorkRequestId == tempWorkRequestId);
                    foreach (var deleteItem in foundQuery5)
                    {
                        db.FmsWorkResult.Remove(deleteItem);
                    }

                    var foundQuery6 = db.FmsWorkOrderToFacility.Where(x =>
                      x.SiteId == tempSiteId &&
                      x.WorkRequestId == tempWorkRequestId);
                    foreach (var deleteItem in foundQuery6)
                    {
                        db.FmsWorkOrderToFacility.Remove(deleteItem);
                    }

                    var foundQuery7 = db.FmsWorkOrder.Where(x =>
                      x.SiteId == tempSiteId &&
                      x.WorkRequestId == tempWorkRequestId);
                    foreach (var deleteItem in foundQuery7)
                    {
                        db.FmsWorkOrder.Remove(deleteItem);
                    }

                    var foundQuery8 = db.FmsWorkRequestToFacility.Where(x =>
                      x.SiteId == tempSiteId &&
                      x.WorkRequestId == tempWorkRequestId);
                    foreach (var deleteItem in foundQuery8)
                    {
                        db.FmsWorkRequestToFacility.Remove(deleteItem);
                    }

                    var foundQuery9 = db.FmsWorkRequest.Where(x =>
                      x.SiteId == tempSiteId &&
                      x.WorkRequestId == tempWorkRequestId);
                    foreach (var deleteItem in foundQuery9)
                    {
                        db.FmsWorkRequest.Remove(deleteItem);
                    }

                    db.SaveChanges();
                    transaction.Complete();
                }
            }
            catch (Exception)
            {
                throw;
            }
            return StatusCode(HttpStatusCode.NoContent);
        }
        protected override void Dispose(bool disposing)
        {
            if (disposing)
            {
                db.Dispose();
            }
            base.Dispose(disposing);
        }
        public class FmsWorkHistory
        {
            public int SiteId { get; set; }
            public int WorkRequestId { get; set; }
            public int WorkTypeId { get; set; }
            public int BusinessFieldId { get; set; }
            public int WorkScheduleId { get; set; }
            public int WorkProgressId { get; set; }
            public string Title { get; set; }
            public string Content { get; set; }
            public string RequestUserId { get; set; }
            public System.DateTime RequestDate { get; set; }
            public System.DateTime StartWorkDate { get; set; }
            public string RejectUserId { get; set; }
            public System.DateTime RejectDate { get; set; }
            public string RejectReason { get; set; }
            public int InspectionAgencyId { get; set; }
        }
    }
}