using Grand.Infrastructure.ModelBinding;
using Grand.Infrastructure.Models;
using Grand.Web.Admin.Models.Common;
using System.ComponentModel.DataAnnotations;

namespace Grand.Web.Admin.Models.Orders
{
    public class MerchandiseReturnModel : BaseEntityModel
    {
        [GrandResourceDisplayName("Admin.Orders.MerchandiseReturns.Fields.ID")]
        public override string Id { get; set; }

        [GrandResourceDisplayName("Admin.Orders.MerchandiseReturns.Fields.ID")]
        public int ReturnNumber { get; set; }

        [GrandResourceDisplayName("Admin.Orders.MerchandiseReturns.Fields.Order")]
        public string OrderId { get; set; }
        public int OrderNumber { get; set; }
        public string OrderCode { get; set; }

        [GrandResourceDisplayName("Admin.Orders.MerchandiseReturns.Fields.ExternalId")]
        public string ExternalId { get; set; }

        [GrandResourceDisplayName("Admin.Orders.MerchandiseReturns.Fields.Customer")]
        public string CustomerId { get; set; }
        [GrandResourceDisplayName("Admin.Orders.MerchandiseReturns.Fields.Customer")]
        public string CustomerInfo { get; set; }

        [GrandResourceDisplayName("Admin.Orders.MerchandiseReturns.Fields.Total")]
        public string Total { get; set; }

        [GrandResourceDisplayName("Admin.Orders.MerchandiseReturns.Fields.CustomerComments")]
        public string CustomerComments { get; set; }

        [GrandResourceDisplayName("Admin.Orders.MerchandiseReturns.Fields.StaffNotes")]
        public string StaffNotes { get; set; }

        [GrandResourceDisplayName("Admin.Orders.MerchandiseReturns.Fields.Status")]
        public int MerchandiseReturnStatusId { get; set; }
        [GrandResourceDisplayName("Admin.Orders.MerchandiseReturns.Fields.Status")]
        public string MerchandiseReturnStatusStr { get; set; }

        [GrandResourceDisplayName("Admin.Orders.MerchandiseReturns.Fields.CreatedOn")]
        public DateTime CreatedOn { get; set; }

        [GrandResourceDisplayName("Admin.Orders.MerchandiseReturns.Fields.Quantity")]
        public int Quantity { get; set; }

        [GrandResourceDisplayName("Admin.Orders.MerchandiseReturns.Fields.PickupDate")]
        public DateTime PickupDate { get; set; }

        [GrandResourceDisplayName("Admin.Orders.MerchandiseReturns.Fields.PickupAddress")]
        public AddressModel PickupAddress { get; set; }

        public List<MerchandiseReturnItemModel> Items { get; set; } = new();

        [GrandResourceDisplayName("Admin.Orders.MerchandiseReturns.NotifyCustomer")]
        public bool NotifyCustomer { get; set; }

        //merchandise return notes
        [GrandResourceDisplayName("Admin.Orders.MerchandiseReturns.MerchandiseReturnNotes.Fields.DisplayToCustomer")]
        public bool AddMerchandiseReturnNoteDisplayToCustomer { get; set; }
        [GrandResourceDisplayName("Admin.Orders.MerchandiseReturns.MerchandiseReturnNotes.Fields.Note")]
        public string AddMerchandiseReturnNoteMessage { get; set; }
        public bool AddMerchandiseReturnNoteHasDownload { get; set; }
        [GrandResourceDisplayName("Admin.Orders.MerchandiseReturns.MerchandiseReturnNotes.Fields.Download")]
        [UIHint("Download")]
        public string AddMerchandiseReturnNoteDownloadId { get; set; }
        
        public class MerchandiseReturnItemModel : BaseEntityModel
        {
            public string ProductId { get; set; }

            public string ProductName { get; set; }

            public string ProductSku { get; set; }

            public string UnitPrice { get; set; }

            public int Quantity { get; set; }

            public string ReasonForReturn { get; set; }

            public string RequestedAction { get; set; }
        }

        public class MerchandiseReturnNote : BaseEntityModel
        {
            public string MerchandiseReturnId { get; set; }
            [GrandResourceDisplayName("Admin.Orders.MerchandiseReturns.MerchandiseReturnNotes.Fields.DisplayToCustomer")]
            public bool DisplayToCustomer { get; set; }
            [GrandResourceDisplayName("Admin.Orders.MerchandiseReturns.MerchandiseReturnNotes.Fields.Note")]
            public string Note { get; set; }
            [GrandResourceDisplayName("Admin.Orders.MerchandiseReturns.MerchandiseReturnNotes.Fields.Download")]
            public string DownloadId { get; set; }
            [GrandResourceDisplayName("Admin.Orders.MerchandiseReturns.MerchandiseReturnNotes.Fields.Download")]
            public Guid DownloadGuid { get; set; }
            [GrandResourceDisplayName("Admin.Orders.MerchandiseReturns.MerchandiseReturnNotes.Fields.CreatedOn")]
            public DateTime CreatedOn { get; set; }
            [GrandResourceDisplayName("Admin.Orders.MerchandiseReturns.MerchandiseReturnNotes.Fields.CreatedByCustomer")]
            public bool CreatedByCustomer { get; set; }
        }
    }
}