using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace OASystem.Domain.ViewModels.Groups
{
    #region 酒店预定 新 View

    /// <summary>
    /// 酒店预定
    /// Items  View
    /// </summary>
    public class HotelReservationsItemsView
    {
        /// <summary>
        /// Number
        /// </summary>
        public int Row_Number { get; set; }

        public int Id { get; set; }

        //public int DiId { get; set; }

        /// <summary>
        /// 客人类型
        /// </summary>
        public string? GuestType { get; set; }

        /// <summary>
        /// 预定号
        /// </summary>
        public string? ReservationsNo { get; set; }

        /// <summary>
        /// 酒店名称
        /// </summary>
        public string? HotelName { get; set; }

        /// <summary>
        /// 入住时间
        /// </summary>
        public string CheckInDate { get; set; }

        /// <summary>
        /// 离店时间
        /// </summary>
        public string CheckOutDate { get; set; }

        /// <summary>
        /// 付款金额
        /// </summary>
        public decimal PayMoney { get; set; }

        ///// <summary>
        ///// 付款币种 Id
        ///// </summary>
        //public int PaymentCurrency { get; set; }

        /// <summary>
        /// 付款币种Code 
        /// </summary>
        public string? PayCurrency { get; set; }

        ///// <summary>
        ///// 创建人Id 
        ///// </summary>
        //public int CreateUserId { get; set; }

        /// <summary>
        /// 创建人姓名
        /// </summary>
        public string? CreateUserName { get; set; }

        /// <summary>
        /// 创建时间
        /// </summary>
        public DateTime CreateTime { get; set; }

        /// <summary>
        /// 总经理审核状态
        /// 0 未审核 1 已审核 2 未通过 4自动审核
        /// </summary>
        public int IsAuditGM { get; set; }

        /// <summary>
        /// 总经理审核状态
        /// 0 未审核 1 已审核 2 未通过 4 自动审核
        /// </summary>
        public string IsAuditGMStr { get {
            
                string? auditStatus = " - ";
                if (IsAuditGM == 0) auditStatus = "未审核";
                else if (IsAuditGM == 1) auditStatus = "已审核";
                else if(IsAuditGM == 2) auditStatus = "未通过";
                else if (IsAuditGM == 3) auditStatus = "自动审核";

                return auditStatus;
            } }

        public int IsPay { get; set; }
    }

    /// <summary>
    /// 酒店预定
    /// Details  View
    /// </summary>
    public class HotelReservationsDetailsView 
    {
        public int Id { get; set; }

        /// <summary>
        /// 客人类型 Id (设置数据外键编号)
        /// </summary>
        public int GTId { get; set; }

        /// <summary>
        /// 入住卷号
        /// </summary>
        public string? CheckNumber { get; set; }

        /// <summary>
        /// 预订网站(设置数据外键编号)
        /// </summary>
        public int ReservationsWebsite { get; set; }

        /// <summary>
        /// 预订号码
        /// </summary>
        public string? ReservationsNo { get; set; }
        
        /// <summary>
        /// 确认号码
        /// </summary>
        public string? DetermineNo { get; set; }

        /// <summary>
        /// 区域Id
        /// </summary>
        public int AreaId { get; set; }

        /// <summary>
        /// 城市
        /// </summary>
        public string? City { get; set; }

        /// <summary>
        /// 酒店名称
        /// </summary>
        public string? HotelName { get; set; }

        /// <summary>
        /// 酒店电话
        /// </summary>
        public string? HotelTel { get; set; }

        /// <summary>
        /// 酒店地址
        /// </summary>
        public string? HotelAddress { get; set; }

        /// <summary>
        /// 客户名称
        /// </summary>
        public string? GuestName { get; set; }

        /// <summary>
        /// 入住时间
        /// </summary>
        public string? CheckInDate { get; set; }

        /// <summary>
        /// 离店时间
        /// </summary>
        public string? CheckOutDate { get; set; }

        /// <summary>
        /// 房间入住人类型(设置数据外键编号)
        /// </summary>
        public int CheckType { get; set; }

        /// <summary>
        /// 房间说明
        /// </summary>
        public string? RoomExplanation { get; set; }

        /// <summary>
        /// 酒店备注
        /// </summary>
        public string? HotelRemark { get; set; }

        /// <summary>
        /// 单间价格
        /// </summary>
        public decimal SingleRoomPrice { get; set; }

        /// <summary>
        /// 单间数量
        /// </summary>
        public int SingleRoomCount { get; set; }
        
        /// <summary>
        /// 双间价格
        /// </summary>
        public decimal DoubleRoomPrice { get; set; }

        /// <summary>
        /// 双间数量
        /// </summary>
        public int DoubleRoomCount { get; set; }

        /// <summary>
        /// 套房价格
        /// </summary>
        public decimal SuiteRoomPrice { get; set; }

        /// <summary>
        /// 套房数量
        /// </summary>
        public int SuiteRoomCount { get; set; }

        /// <summary>
        /// 其他房间价格
        /// </summary>
        public decimal OtherRoomPrice { get; set; }

        /// <summary>
        /// 其他房间数量
        /// </summary>
        public int OtherRoomCount { get; set; }

        /// <summary>
        /// 信用卡金额
        /// </summary>
        public decimal CardPrice { get; set; }

        /// <summary>
        /// 信用卡币种
        /// </summary>
        public int CardPriceCurrency { get; set; }

        ///// <summary>
        ///// 是否由地接支付
        ///// 0 否 1 是
        ///// </summary>
        //public int Isoppay { get; set; }

        ///// <summary>
        ///// 早餐价格
        ///// </summary>
        //public decimal BreakfastPrice { get; set; }

        ///// <summary>
        ///// 早餐币种 (设置数据外键编号)
        ///// </summary>
        //public int BreakfastCurrency { get; set; }

        ///// <summary>
        ///// 地税
        ///// </summary>
        //public decimal GovernmentRent { get; set; }

        ///// <summary> 
        ///// 地税币种 (设置数据外键编号)
        ///// </summary>
        //public int GovernmentRentCurrency { get; set; }

        ///// <summary>
        ///// 城市税
        ///// </summary>
        //public decimal CityTax { get; set; }

        ///// <summary>
        ///// 城市税币种 (设置数据外键编号)
        ///// </summary>
        //public int CityTaxCurrency { get; set; }

        ///// <summary>
        ///// 支付方式 (设置数据外键编号)
        ///// </summary>
        //public int PayDId { get; set; }

        ///// <summary>
        ///// 消费方式
        ///// </summary>
        //public string? ConsumptionPatterns { get; set; }

        ///// <summary>
        ///// 消费日期
        ///// </summary>
        //public string? ConsumptionDate { get; set; }

        /// <summary>
        /// 付款金额
        /// </summary>
        public decimal PayMoney { get; set; }

        /// <summary>
        /// 付款币种 (设置数据外键编号)
        /// </summary>
        public int PaymentCurrency { get; set; }

        ///// <summary>
        ///// 银行卡号
        ///// </summary>
        //public string? BankNo { get; set; }
        ///// <summary>
        ///// 持卡人姓名
        ///// </summary>
        //public string? CardholderName { get; set; }

        ///// <summary>
        ///// 公司银行账号
        ///// </summary>
        //public string? CompanyBankNo { get; set; }

        ///// <summary>
        ///// 对方开户行
        ///// </summary>
        //public string? OtherBankName { get; set; }

        ///// <summary>
        ///// 对方银行账号
        ///// </summary>
        //public string? OtherSideNo { get; set; }

        ///// <summary>
        ///// 对方姓名
        ///// </summary>
        //public string? OtherSideName { get; set; }

        ///// <summary>
        ///// 收款方
        ///// </summary>
        //public string? Payee { get; set; }

        ///// <summary>
        ///// 费用标识 (设置数据外键编号)
        ///// </summary>
        //public int OrbitalPrivateTransfer { get; set; }

        /// <summary>
        /// C表付款信息 备注
        /// </summary>
        public string? CcpRemark { get; set; }
         
        public List<HotelReservationsContnetDetailsView>  Contents { get; set; }
    }

    public class HotelReservationsContnetDetailsView
    {
        public int Id { get; set; }

        public int DiId { get; set; }

        public int HrId { get; set; }

        /// <summary>
        /// 费用类型
        /// 1:房费
        /// 2:早餐
        /// 3:地税
        /// 4:城市税
        /// </summary>
        public int PriceType { get; set; }

        /// <summary>
        /// 费用
        /// </summary>
        public decimal Price { get; set; }

        /// <summary>
        /// 币种
        /// </summary>
        public int Currency { get; set; }

        /// <summary>
        /// 汇率
        /// </summary>
        public decimal Rate { get; set; }

        /// <summary>
        /// 由地接支付
        /// 0 否 1是
        /// </summary>
        public int IsOppay { get; set; }

        /// <summary>
        /// 支付方式
        /// </summary>
        public int PayDId { get; set; } = 1;

        /// <summary>
        /// 消费方式
        /// </summary>
        public string ConsumptionPatterns { get; set; }
        /// <summary>
        /// 消费日期
        /// </summary>
        public string ConsumptionDate { get; set; }
        /// <summary>
        /// 卡类型
        /// </summary>
        public int CTDId { get; set; }
        /// <summary>
        /// 银行卡号
        /// </summary>
        public string BankNo { get; set; }
        /// <summary>
        /// 持卡人姓名
        /// </summary>
        public string CardholderName { get; set; }
        /// <summary>
        /// 公司银行卡号
        /// </summary>
        public string CompanyBankNo { get; set; }
        /// <summary>
        /// 对方开户行
        /// </summary>
        public string OtherBankName { get; set; }
        /// <summary>
        /// 对方银行账号
        /// </summary>
        public string OtherSideNo { get; set; }
        /// <summary>
        /// 对方姓名
        /// </summary>
        public string OtherSideName { get; set; }

        /// <summary>
        /// 收款方
        /// </summary>
        public string Payee { get; set; }
        /// <summary>
        /// 费用标识
        /// 0 公转 1 私转
        /// </summary>
        public int OrbitalPrivateTransfer { get; set; } = 0;
    }

    /// <summary>
    /// 酒店Voucher Info
    /// </summary>
    public class HotelVoucherInfoView
    {
        /// <summary>
        /// 酒店名称
        /// </summary>
        public string? HotelName { get; set; }

        /// <summary>
        /// 入住时间
        /// </summary>
        public string? CheckInDate { get; set; }

        /// <summary>
        /// 离店时间
        /// </summary>
        public string? CheckOutDate { get; set; }

        /// <summary>
        /// 房间类型
        /// </summary>
        public string? RoomType { get; set; }

        /// <summary>
        /// 确认号
        /// </summary>
        public string? ConfirmationNumber { get; set; }
    }

    /// <summary>
    /// 酒店预订
    /// 生成 预定成本 Excel 
    /// </summary>
    public class HotelReservations_PCFD_View 
    {
        /// <summary>
        /// 城市地区
        /// </summary>
        public string City { get; set; }

        /// <summary>
        /// 酒店名称
        /// </summary>
        public string HotelName { get; set; }

        /// <summary>
        /// 时间
        /// checkInDate  -  CheckInOut
        /// </summary>
        public string Date { get; set; }

        /// <summary>
        /// 单间单价
        /// </summary>
        public string SingleRoomPrice { get; set; }
        /// <summary>
        /// 双间单价
        /// </summary>
        public string DoubleRoomPrice { get; set; }
        /// <summary>
        /// 套房单价
        /// </summary>
        public string SuiteRoomPrice { get; set; }
        /// <summary>
        /// 其他房型单价
        /// </summary>
        public string OtherRoomPrice { get; set; }

        /// <summary>
        /// 早餐费
        /// </summary>
        public string BreakfastPrice { get; set; }

        

        /// <summary>
        /// 城市税
        /// </summary>
        public string CityTax { get; set; }

        /// <summary>
        /// 地税
        /// </summary>
        public string GovernmentRent { get; set; }

        /// <summary>
        /// 消费说明
        /// </summary>
        public string RoomExplanation { get; set; }

        /// <summary>
        /// 消费方式
        /// </summary>
        public string ConsumptionPatterns { get; set; }

        /// <summary>
        /// 支付方式
        /// </summary>
        public string PayTypeName { get; set; }

        /// <summary>
        /// 支付时间
        /// </summary>
        public string PayTime { get; set; }

        /// <summary>
        /// 银行账号
        /// </summary>
        public string BankNo { get; set; }

        /// <summary>
        /// 付款金额
        /// </summary>
        public string PayMoney { get; set; }


        /// <summary>
        /// 行用卡金额
        /// </summary>
        public string CardPrice { get; set; }

        /// <summary>
        /// 备注
        /// </summary>
        public string Remark { get; set; }
    }


    #endregion


    #region 保留


    /// <summary>
    /// 根据diid查询酒店费用列表
    /// </summary>
    public class HotelReservationsByDiIdView
    {
        /// <summary>
        /// 酒店主键Id
        /// </summary>
        public int Id { get; set; }
        /// <summary>
        /// 客人类型
        /// </summary>
        public string GuestType {  get; set; }
        /// <summary>
        /// 预订编号
        /// </summary>
        public string ReservationsNo { get; set; }
        /// <summary>
        /// 酒店名称
        /// </summary>
        public string HotelName { get; set; }
        /// <summary>
        /// 入住日期
        /// </summary>
        public string CheckInDate { get; set; }
        /// <summary>
        /// 离店日期
        /// </summary>
        public string CheckOutDate { get; set; }
        /// <summary>
        /// 付款金额
        /// </summary>
        public decimal PayMoney { get; set; }
        /// <summary>
        /// 付款币种
        /// </summary>
        public string PaymentCurrency { get; set; }
        /// <summary>
        /// 创建人Id
        /// </summary>
        public string CreateUserName { get; set; }
        /// <summary>
        /// 操作时间
        /// </summary>
        public DateTime CreateTime { get; set; }
        /// <summary>
        /// 总经理是否审核
        /// </summary>
        public int IsAuditGM { get; set; }

        /// <summary>
        /// 总经理是否审核
        /// </summary>
        public string IsAuditGMStr { get; set; }
        /// <summary>
        /// 附件地址
        /// </summary>
        public string Attachment { get; set; }
    }
    /// <summary>
    /// 根据id查询酒店费用详情返回view
    /// </summary>
    public class HotelReservationsByIdView
    {
        public int Id { get; set; }
        /// <summary>
        /// 团组Id
        /// </summary>
        public int DiId { get; set; }
        /// <summary>
        /// 客人类型(设置数据外键编号)
        /// </summary>
        public int GTId { get; set; }

        /// <summary>
        /// 客人类型文本
        /// </summary>
        public string GtIdStr { get; set; }
        /// <summary>
        /// 入住卷号码
        /// </summary>
        public string CheckNumber { get; set; }
        /// <summary>
        /// 预订网站(设置数据外键编号)
        /// </summary>
        public int ReservationsWebsite { get; set; }
        /// <summary>
        /// 预订号码
        /// </summary>
        public string ReservationsNo { get; set; }
        /// <summary>
        /// 酒店确定编号
        /// </summary>
        public string DetermineNo { get; set; }
        /// <summary>
        /// 所在城市
        /// </summary>
        public string City { get; set; }
        /// <summary>
        /// 酒店名称
        /// </summary>
        public string HotelName { get; set; }
        /// <summary>
        /// 酒店地址
        /// </summary>
        public string HotelAddress { get; set; }
        /// <summary>
        /// 酒店电话
        /// </summary>
        public string HotelTel { get; set; }
        /// <summary>
        /// 客人姓名
        /// </summary>
        public string GuestName { get; set; }
        /// <summary>
        /// 预算币种(设置数据外键编号)
        /// </summary>
        public int BudgetCurrency { get; set; }
        /// <summary>
        /// 预算币种(设置数据外键编号)
        /// </summary>
        public string BudgetCurrencyStr { get; set; }
        /// <summary>
        /// 入住日期
        /// </summary>
        public string CheckInDate { get; set; }
        /// <summary>
        /// 退房日期
        /// </summary>
        public string CheckOutDate { get; set; }
        /// <summary>
        /// 单间数量
        /// </summary>
        public int SingleRoomCount { get; set; }
        /// <summary>
        /// 单间单价
        /// </summary>
        public decimal SingleRoomPrice { get; set; }
        /// <summary>
        /// 双间数量
        /// </summary>
        public int DoubleRoomCount { get; set; }
        /// <summary>
        /// 双间单价
        /// </summary>
        public decimal DoubleRoomPrice { get; set; }
        /// <summary>
        /// 套房数量
        /// </summary>
        public int SuiteRoomCount { get; set; }
        /// <summary>
        /// 套房单价
        /// </summary>
        public decimal SuiteRoomPrice { get; set; }
        /// <summary>
        /// 其他房型数量
        /// </summary>
        public int OtherRoomCount { get; set; }
        /// <summary>
        /// 其他房型单价
        /// </summary>
        public decimal OtherRoomPrice { get; set; }
        /// <summary>
        /// 房间说明
        /// </summary>
        public string RoomExplanation { get; set; }
        /// <summary>
        /// 附件地址
        /// </summary>
        public string Attachment { get; set; }
        /// <summary>
        /// 信用卡金额
        /// </summary>
        public decimal CardPrice { get; set; }
        /// <summary>
        /// 信用卡币种
        /// </summary>
        public int CardPriceCurrency { get; set; }
        /// <summary>
        /// 确认标识   信用卡金额
        /// 0:未刷(红色)  1:已刷(绿色)
        /// </summary>
        public int IsCardPrice { get; set; }
        /// <summary>
        /// 预计单间数量
        /// </summary>
        public int PredictSingleRoom { get; set; }
        /// <summary>
        /// 预计双人间数量
        /// </summary>
        public int PredictDoubleRoom { get; set; }
        /// <summary>
        /// 预计套房数量
        /// </summary>
        public int PredictSuiteRoom { get; set; }
        /// <summary>
        /// 预计其他间数量
        /// </summary>
        public int PredictOtherRoom { get; set; }
        /// <summary>
        /// 地税
        /// </summary>
        public decimal GovernmentRent { get; set; }
        /// <summary>
        /// 地税币种
        /// </summary>
        public int GovernmentRentCurrency { get; set; }
        /// <summary>
        /// 地税币种文本
        /// </summary>
        public string GovernmentRentCurrencyStr { get; set; }
        /// <summary>
        /// 城市税
        /// </summary>
        public decimal CityTax { get; set; }
        /// <summary>
        /// 城市税币种
        /// </summary>
        public int CityTaxCurrency { get; set; }
        /// <summary>
        /// 城市税币种文本
        /// </summary>
        public string CityTaxCurrencyStr { get; set; }
        /// <summary>
        /// 房间入住人类型
        /// </summary>
        public string CheckType { get; set; }
        /// <summary>
        /// 房间入住人类型文本描述
        /// </summary>
        public string CheckTypeStr { get; set; }
        /// <summary>
        /// 备注
        /// </summary>
        public string Remark { get; set; }
    }
    /// <summary>
    /// 根据id查询酒店费用C表的数据
    /// </summary>
    public class Grp_CreditCardView
    {
        /// <summary>
        /// 支付方式
        /// </summary>
        public int PayDId { get; set; }
        /// <summary>
        /// 支付方式文本
        /// </summary>
        public string PayDIdStr { get; set; }
        /// <summary>
        /// 消费方式
        /// </summary>
        public string ConsumptionPatterns { get; set; }
        /// <summary>
        /// 消费日期
        /// </summary>
        public string ConsumptionDate { get; set; }
        /// <summary>
        /// 卡类型
        /// </summary>
        public int CTDId { get; set; }
        /// <summary>
        /// 卡类型文本
        /// </summary>
        public string CTDIdStr { get; set; }

        /// <summary>
        /// 银行卡号
        /// </summary>
        public string BankNo { get; set; }
        /// <summary>
        /// 持卡人姓名
        /// </summary>
        public string CardholderName { get; set; }
        /// <summary>
        /// 付款金额
        /// </summary>
        public decimal PayMoney { get; set; }
        /// <summary>
        /// 付款币种 数据类型Id
        /// </summary>
        public int PaymentCurrency { get; set; }
        /// <summary>
        /// 付款币种 文本
        /// </summary>
        public string PaymentCurrencyStr { get; set; }
        /// <summary>
        /// 当天汇率
        /// </summary>
        public decimal DayRate { get; set; }
        /// <summary>
        /// 公司银行卡号
        /// </summary>
        public string CompanyBankNo { get; set; }
        /// <summary>
        /// 对方开户行
        /// </summary>
        public string OtherBankName { get; set; }
        /// <summary>
        /// 对方银行账号
        /// </summary>
        public string OtherSideNo { get; set; }
        /// <summary>
        /// 对方姓名
        /// </summary>
        public string OtherSideName { get; set; }
        
        /// <summary>
        /// 总经理是否审核  0 未审核 1已通过 2未通过
        /// </summary>
        public int IsAuditGM { get; set; }
        /// <summary>
        /// 收款方
        /// </summary>
        public string Payee { get; set; }
        /// <summary>
        /// 人民币费用
        /// </summary>
        public decimal RMBPrice { get; set; }

        /// <summary>
        /// 费用标识
        /// </summary>
        public int OrbitalPrivateTransfer { get; set; }
        /// <summary>
        /// 费用标识文本
        /// </summary>
        public int OrbitalPrivateTransferStr { get; set; }
        /// <summary>
        /// 备注
        /// </summary>
        public string Remark { get; set; }

    }
    /// <summary>
    /// 返回付款金额
    /// </summary>
    public class HotelReservationsView
    {
        public decimal Price { get; set; }
        public int CurrencyId { get; set; }
        public string CurrencyName { get; set; }
    }
    
    #endregion
}