using OASystem.Domain.Dtos.CRM;
using OASystem.Domain.Dtos.Groups;
using OASystem.Domain.Dtos.Resource;
using OASystem.Domain.Dtos.System;
using OASystem.Domain.Dtos.UserDto;
using OASystem.Domain.Entities;
using OASystem.Domain.Entities.Customer;
using OASystem.Domain.Entities.Business;
using OASystem.Domain.Entities.Groups;
using OASystem.Domain.Entities.Resource;
using OASystem.Domain.Entities.System;
using OASystem.Domain.ViewModels;
using OASystem.Domain.ViewModels.Business;
using OASystem.Domain.ViewModels.Resource;
using OASystem.Domain.ViewModels.System;
using OASystem.Domain.Dtos.Financial;
using OASystem.Domain.Entities.Financial;
using static OASystem.Domain.Dtos.CRM.NewClientDataQueryDto;
using OASystem.Domain.ViewModels.Groups;
using OASystem.Domain.ViewModels.CRM;
using OASystem.Domain.ViewModels.PersonnelModule;
using OASystem.Domain.Entities.PersonnelModule;
using OASystem.Domain.Dtos.PersonnelModule;
using OASystem.Domain.Dtos.Statistics;
using OASystem.Domain.ViewModels.Financial;
using OASystem.Domain.ViewModels.Statistics;
using AutoMapper.Internal;

namespace OASystem.Domain.AutoMappers
{
    public class _baseMappingProfile : Profile
    {
        public _baseMappingProfile()
        {
            #region Login
            CreateMap<LoginDto, Sys_Users>();
            CreateMap<UpdateDto, Sys_Users>();
            #endregion

            #region Systen

            #region 消息

            CreateMap<Sys_Message, DepartmentIView>();
            CreateMap<Sys_MessageReadAuth, DepartmentIView>();
            #endregion

            #region 数据类型板块
            CreateMap<OperationSetDataTypeDto, Sys_SetDataType>();
            CreateMap<OperationSetDataDto, Sys_SetData>();
            CreateMap<Sys_SetData, SetDataInfoView>();
            CreateMap<Sys_SetData, SetDataCurrencyInfoView>();
            #endregion

            #region 公司板块
            CreateMap<Sys_Company, CompanyView>();
            CreateMap<AddCompanyDto, Sys_Company>();
            CreateMap<EditCompanyDto, Sys_Company>();
            #endregion

            #region 部门板块
            CreateMap<Sys_Department, DepartmentIView>();
            CreateMap<AddDepartmentDto, Sys_Department>();
            CreateMap<EditDepartmentDto, Sys_Department>();
            #endregion

            #region 岗位板块
            CreateMap<Sys_JobPost, JobPostView>();
            CreateMap<AddJobPostDto, Sys_JobPost>();
            CreateMap<Sys_JobPostI, JobPostView>();
            #endregion

            #region 用户板块
            CreateMap<UserDto, Sys_Users>();
            CreateMap<Sys_Users, UserInfo>();
            CreateMap<UserInfo, UserInfoWebView>();
            CreateMap<EditUserInfoDto, Sys_Users>();

            #endregion

            #region 功能权限板块
            CreateMap<OperationFunInitDta, Sys_PageFunctionPermission>();
            #endregion

            #endregion

            #region Group

            CreateMap<GroupListDto, Grp_DelegationInfo>();
            CreateMap<Grp_ScheduleDetailUpdDto, Grp_ScheduleDetailInfo>();
            CreateMap<Grp_ScheduleDetailInsertDto, Grp_ScheduleDetailInfo>();
            CreateMap<TaskAssignmenDto, Grp_GroupsTaskAssignment>();

            CreateMap<Grp_DelegationInfo, ShareGroupInfoIIView>();
            CreateMap<GroupProcessOperationDto, GroupOperationDto>();
            CreateMap<DelegationInfoWebView, GroupProcessOperationDto>();

            #region 机票费用录入
            CreateMap<AirTicketResOp, Grp_AirTicketReservations>();
            CreateMap<CardPayment, Grp_CreditCardPayment>();
            CreateMap<Grp_GroupCostParameter,AirGroupCostParameterView>();
            CreateMap<Edit_GrpCreditCardPaymentDto, Grp_CreditCardPayment>();
            #endregion

            #region 团组增减款项
            CreateMap<DecreasePaymentsOpDto, Grp_DecreasePayments>();
            #endregion

            #region 商邀费用
            CreateMap<OpInvitationOfficialActivitiesDto, Grp_InvitationOfficialActivities>();
            CreateMap<OpInvitationOfficialActivitiesDto,Res_InvitationOfficialActivityData>();
            CreateMap<Grp_InvitationOfficialActivities, InvitationOfficialActivitiesByIdView>();
            CreateMap<Grp_InvitationOfficialActivities, Grp_InvitationOfficialActivitiesView>();
            #endregion

            #region 团组英文资料
            CreateMap<OpDelegationEnDataDto, Grp_DelegationEnData>();
            #endregion

            #region 餐厅资料


            CreateMap<Grp_RestaurantInfo, RestaurantInfoView>();
            CreateMap<RestaurantOpDto, Grp_RestaurantInfo>();
            #endregion

            #region 出入境费用明细

            CreateMap<Grp_EnterExitCost, EnterExitCostInfoView>();
            CreateMap<EnterExitCostOperateDto, Grp_EnterExitCost>();
            CreateMap<DayAndCostAddView, Grp_DayAndCost>();


            CreateMap<Grp_EnterExitCostDraft, EnterExitCostDraftInfoView>();

            CreateMap<EnterExitCostDraftOpDto, Grp_EnterExitCostDraft>();
            CreateMap<DayAndCostDraftAddView, Grp_DayAndCostDraft>();
            CreateMap<Grp_DayAndCostDraft, DayAndCostDraftAddView>();



            CreateMap<Grp_EnterExitCost, EnterExitCostMobileInfoView>();
            CreateMap<Grp_EnterExitCost, EnterExitCostMobileParentInfoView>();

            CreateMap<PostEnterExitCostMobileFeeOpCheckboxDto, Grp_EnterExitCost>();
            CreateMap<PostEnterExitCostMobileOpStep1Dto, Grp_EnterExitCost>();
            CreateMap<PostEnterExitCostMobileOpStep2Dto, Grp_EnterExitCost>();
            CreateMap<DayAndCostMobileInfoDto, Grp_DayAndCost>();
            CreateMap<DayOtherPriceMobileInfoDto, Grp_DayOtherPrice>();
            CreateMap<PostEnterExitCostMobileOpSingleStep3To6Dto, Grp_DayAndCost>();
            CreateMap<PostEnterExitCostMobileOpSingleStep7Dto, Grp_DayOtherPrice>();

            CreateMap<Grp_EnterExitCostDraft, Grp_EnterExitCost>();
            CreateMap<Grp_DayAndCostDraft, Grp_DayAndCost>();
            CreateMap<Grp_DayOtherPriceDraft, Grp_DayOtherPrice>();

            #endregion

            #region 出入境国家费用标准

            CreateMap<NationalTravelFeeOperateDto, Grp_NationalTravelFee>();
            #endregion

            #region 签证费用录入
            CreateMap<OpVisaPriceDto, Grp_VisaInfo>();
            CreateMap<OpVisaPriceDto, Grp_CreditCardPayment>();
            #endregion


            #region op费用
            CreateMap<OpCarTouristGuideGroundDto, Grp_CarTouristGuideGroundReservations>();
            CreateMap<Grp_CreditCardPayment, CarTouristCreditCardPaymentView>();
            CreateMap<Grp_CarTouristGuideGroundReservationsContent, CarTouristGuideGroundReservationsContentView>();
            #endregion

            #region 成本
            CreateMap<Grp_GroupCostDto, Grp_GroupCost>();
            CreateMap<Grp_CheckBoxsDto, Grp_CheckBoxs>();
            CreateMap<Grp_CostTypeHotelNumberDto, Grp_CostTypeHotelNumber>();
            CreateMap<Grp_GroupCostParameterDto, Grp_GroupCostParameter>();
            CreateMap<Grp_GroupCost, Grp_GroupCostDto>();
            CreateMap<Grp_GroupCostParameter, Grp_GroupCostParameterDto>();
            #endregion

            #region 酒店预订
            CreateMap<Grp_HotelReservations, HotelReservationsByIdView>();
            CreateMap<Grp_CreditCardPayment, Grp_CreditCardView>();
            CreateMap<OpHotelReservationsData, Grp_HotelReservations>();
            CreateMap<HotelReservationsContnetDetailsView, Grp_HotelReservationsContent>();
            CreateMap<OpHotelReservationsData, Grp_CreditCardPayment>();
            #endregion

            #region 酒店预订-New 2024-01-02 09:32
            CreateMap<HotelReservationsAddOrEditDto, Grp_HotelReservations>();
            CreateMap<HotelReservationsAddOrEditDto, Grp_CreditCardPayment>();
            #endregion

            CreateMap<Grp_Customers, CustomersByIdView>();
            CreateMap<Grp_CreditCardPayment, CreditCardView>();
            CreateMap<OpCustomersDto, Grp_Customers>();
            CreateMap<OpCustomersDto, Grp_CreditCardPayment>();

            #region 签证提成录入

            CreateMap<VisaCommissionCreateDto, Grp_VisaCommission>();
            CreateMap<VisaCommissionCreateView, Grp_VisaCommission>();
            #endregion


            #region  团组接待意见调查
            CreateMap<OpinionaireManageInfo, Grp_Opinionaire>();
            CreateMap<Grp_Opinionaire, OpinionaireUserListView>();
            CreateMap<OpinionaireUserSaveInfo, Grp_Opinionaire>();
            CreateMap<Res_TranslatorLibrary, TranslatorLibraryInfoView>();
            CreateMap<Res_TranslatorLibrary, TranslatorView>();
            CreateMap<TranslatorView, Res_TranslatorLibrary>();
            #endregion
            #endregion

            #region Resource

            #region 车公司资料
            CreateMap<Res_CarData, CarDataView>();
            CreateMap<AddCarDataDto, Res_CarData>();
            CreateMap<UpCarDataDto, Res_CarData>();
            CreateMap<Res_CarData, CarDataSelectView>();
            #endregion
            #region 导游地接资料
            CreateMap<Res_LocalGuideData, LocalGuideDataView>();
            CreateMap<LocalGuideOperationDto, Res_LocalGuideData>();
            CreateMap<Res_LocalGuideData, Res_LocalGuideData_ListItemView>();
            #endregion
            #region 机场三字码资料
            CreateMap<Res_ThreeCode, ThreeCodeView>();
            CreateMap<ThreeCodeOperationDto, Res_ThreeCode>();
            #endregion
            #region 代理商合作资料
            CreateMap<OpAirTicketAgentDto, Res_AirTicketAgent>();
            #endregion
            #region 酒店资料数据
            CreateMap<Res_HotelData, HotelDataView>();
            CreateMap<Res_HotelData, QueryHotelDataSelect>();
            CreateMap<OperationHotelDto, Res_HotelData>();
            #endregion
            #region 签证费用资料
            CreateMap<Res_CountryFeeCost, CountryFeeCostView>();
            CreateMap<OperationCountryFeeCostDto, Res_CountryFeeCost>();
            #endregion
            #region 物料供应商
            CreateMap<Edit_ResItemVendorDto, Res_ItemVendor>()
                 .ForMember(dest => dest.Address, opt => opt.MapFrom(src => src.VendorAddress))
                 .ForMember(dest => dest.CreateUserId, opt => opt.MapFrom(src => src.SysUserId))
                 .ForMember(dest => dest.Remark, opt => opt.MapFrom(src => src.Remark))
                 .ForMember(dest => dest.FullName, opt => opt.MapFrom(src => src.VendorFullName))
                 .ForMember(dest => dest.Id, opt => opt.MapFrom(src => src.VendorId))
                 .ForMember(dest => dest.Job, opt => opt.MapFrom(src => src.VendorJob))
                 .ForMember(dest => dest.Linker, opt => opt.MapFrom(src => src.VendorLinker))
                 .ForMember(dest => dest.Mobile, opt => opt.MapFrom(src => src.VendorMobile))
                 .ForMember(dest => dest.ShortName, opt => opt.MapFrom(src => src.VendorShortName))
                 .ForMember(dest => dest.BusRange, opt => opt.MapFrom(src => src.BusRange));


            CreateMap<Edit_ResItemInfoDto, Res_ItemDetailInfo>();
            #endregion
            #region 商邀资料
            CreateMap<OpInvitationOfficialActivityDto, Res_InvitationOfficialActivityData>();
            CreateMap<Res_InvitationOfficialActivityData, IOAInfoView>();
            #endregion

            #region 公务出访
            CreateMap<OpOfficialActivitiesDto, Res_OfficialActivities>();
            #endregion
            #region 请示数据库
            CreateMap<OpAskDataDto, Res_AskData>();
            #endregion

            #region 黑屏代码录入
            CreateMap<OpTicketBlackCodeDto, Air_TicketBlackCode>();
            #endregion

            #region 翻译人员库
            CreateMap<TranslatorLibraryOpDto, Res_TranslatorLibrary>();
            #endregion

            #region 供应商资料库
            CreateMap<MediaSupplierAddOrEditDto, Res_MediaSuppliers>();
            #endregion


            #region 保险国家基础费用
            CreateMap<InsuranceCostOpDto, Res_BasicInsuranceCost>();
            #endregion
            #endregion

            #region Crm

            #region 客户公司资料板块
            CreateMap<OperationClientCompanyDto, Crm_CustomerCompany>();
            #endregion
            #region 客户资料板块
            CreateMap<DeleClient, Crm_DeleClient>();
            CreateMap<CustomerFamily,Crm_VisaCustomerFamily>();
            CreateMap<CustomerCerts, Crm_CustomerCert>();
            CreateMap<VisaCustomerCompany, Crm_VisaCustomerCompany>();
            CreateMap<VisaCustomerSchool,Crm_VisaCustomerSchool>();
            #endregion
            #region 新客户资料
            CreateMap<NewClientOpDto, Crm_NewClientData>();
            CreateMap<Crm_NewClientData, NewClientDataView>();
            CreateMap<Crm_NewClientData, NewClientDataExcelDownloadView>();
            CreateMap<NewClientDataRecordInfoView, NewClientDataRecordView>();
            #endregion
            #endregion

            #region Financial
            CreateMap<AddDailyFeePaymentDto, Fin_DailyFeePayment>();
            CreateMap<AddDailyFeePaymentContentDto, Fin_DailyFeePaymentContent>();
            CreateMap<EditDailyFeePaymentDto, Fin_DailyFeePayment>();
            CreateMap<EditDailyFeePaymentContentDto, Fin_DailyFeePaymentContent>();

            #region 收款账单
            CreateMap<Fin_ForeignReceivables, ProceedsReceivedNewView>();
            #endregion
            #endregion

            #region Statistics
            CreateMap<StatisticsBRCostView, StatisticsBRCostBriefView>();
            CreateMap<GroupRoyaltyFeeInfo, GroupRoyaltyFeeView>();
            CreateMap<GroupRoyaltyFeeInfo, GroupRoyaltyFeeExcelView>();
            CreateMap<CorporateProfitInfo, CorporateProfitItem>();
            #endregion

            #region 人事 模块
            //CreateMap<WageSheetInfoView, Pm_WageSheet>();
            CreateMap<Pm_WageSheet, WageSheetItemInfoView>();
            CreateMap<WageAddOrEditDto, Pm_WageSheet>();
            CreateMap<WageSheetInfos, Pm_WageSheet>();
            CreateMap<SalaryCalculatorSingleDto, Pm_WageSheet>();
            CreateMap<WageSheetInfoView, Pm_WageSheet>();
            CreateMap<Pm_WageSheet, WageSheetInfoView>();
            CreateMap<Pm_WageSheet, WageSheetInfoView>();
            CreateMap<WageSheetMonthWorkdaysAddOrEditDto, Pm_WageIssueWorkingDay>();
            CreateMap<CalendarInfoView, Sys_Calendar>();
            CreateMap<TaskAllocationAddOrEditDto, Pm_TaskAllocation>();

            #region 进销存
            CreateMap<GoodsStorageOpDto, Pm_GoodsStorage>();
            CreateMap<GoodsReceiveOpDto, Pm_GoodsReceive>();
            CreateMap<GoodsReceiveInfoMobileView, GoodsReceiveInfoView>(); //
            CreateMap<GoodsReceiveListMobileView, GoodsReceiveListView>();
            #endregion
            #endregion

            #region 倒推表
            CreateMap<InvertedListUpdateDto, Grp_InvertedList>();
            CreateMap<VisaCountryInfo, Grp_InvertedListVisaCountry>();
            #endregion

            #region 酒店询价
            CreateMap<HotelInquiryAddOrEditDto, Grp_HotelInquiry>();
            #endregion

            #region 市场客户资料 --> 拜访客户记录
            CreateMap<MarketingSalesVCOperrateDto, Grp_VisitingClients>();
            CreateMap<VisitingClientsListView, Grp_VisitingClients>();
            #endregion
        }
    }

    public class AutoMapperConfig
    {
        /// <summary>
        /// 验证配置
        /// </summary>
        public static void Initialize()
        {
            var config = new MapperConfiguration(cfg =>
            {
                cfg.Internal().AllowAdditiveTypeMapCreation = true;
                cfg.AddProfile<_baseMappingProfile>();
            });

            var mapper = config.CreateMapper();

            // 验证配置
            config.AssertConfigurationIsValid();
        }
    }
}