using Indotalent.Features.Inventory.MovementReport;
using Indotalent.Features.Inventory.NegativeAdjustment;
using Indotalent.Features.Inventory.PositiveAdjustment;
using Indotalent.Features.Inventory.Product;
using Indotalent.Features.Inventory.ProductGroup;
using Indotalent.Features.Inventory.Scrapping;
using Indotalent.Features.Inventory.StockCount;
using Indotalent.Features.Inventory.StockReport;
using Indotalent.Features.Inventory.TransactionReport;
using Indotalent.Features.Inventory.TransferIn;
using Indotalent.Features.Inventory.TransferOut;
using Indotalent.Features.Inventory.UnitMeasure;
using Indotalent.Features.Inventory.Warehouse;
using Indotalent.Features.Profile.Avatar;
using Indotalent.Features.Profile.Password;
using Indotalent.Features.Profile.PersonalInformation;
using Indotalent.Features.Purchase.Bill;
using Indotalent.Features.Purchase.BillReport;
using Indotalent.Features.Purchase.DebitNote;
using Indotalent.Features.Purchase.GoodsReceive;
using Indotalent.Features.Purchase.PaymentDisburse;
using Indotalent.Features.Purchase.PaymentDisburseReport;
using Indotalent.Features.Purchase.PurchaseOrder;
using Indotalent.Features.Purchase.PurchaseReport;
using Indotalent.Features.Purchase.PurchaseRequisition;
using Indotalent.Features.Purchase.PurchaseReturn;
using Indotalent.Features.Purchase.PurchaseReturnReport;
using Indotalent.Features.Purchase.ReceiveReport;
using Indotalent.Features.Root.Home;
using Indotalent.Features.Sales.CreditNote;
using Indotalent.Features.Sales.DeliveryOrder;
using Indotalent.Features.Sales.DeliveryReport;
using Indotalent.Features.Sales.Invoice;
using Indotalent.Features.Sales.InvoiceReport;
using Indotalent.Features.Sales.PaymentReceive;
using Indotalent.Features.Sales.PaymentReceiveReport;
using Indotalent.Features.Sales.SalesOrder;
using Indotalent.Features.Sales.SalesQuotation;
using Indotalent.Features.Sales.SalesReport;
using Indotalent.Features.Sales.SalesReturn;
using Indotalent.Features.Sales.SalesReturnReport;
using Indotalent.Features.Serilogs;
using Indotalent.Features.Setting.AutoNumberSequence;
using Indotalent.Features.Setting.Company;
using Indotalent.Features.Setting.Currency;
using Indotalent.Features.Setting.SystemUser;
using Indotalent.Features.Setting.Tax;
using Indotalent.Features.Thirdparty.Customer;
using Indotalent.Features.Thirdparty.CustomerCategory;
using Indotalent.Features.Thirdparty.CustomerContact;
using Indotalent.Features.Thirdparty.CustomerGroup;
using Indotalent.Features.Thirdparty.Vendor;
using Indotalent.Features.Thirdparty.VendorCategory;
using Indotalent.Features.Thirdparty.VendorContact;
using Indotalent.Features.Thirdparty.VendorGroup;
using Indotalent.Features.Utilities.BookingGroup;
using Indotalent.Features.Utilities.BookingManager;
using Indotalent.Features.Utilities.BookingResource;
using Indotalent.Features.Utilities.BookingScheduler;
using Indotalent.Features.Utilities.ProgramManager;
using Indotalent.Features.Utilities.ProgramResource;
using Indotalent.Features.Utilities.Todo;

namespace Indotalent.Features;

public static class FeaturesEndpointMap
{
    public static IEndpointRouteBuilder MapFeaturesEndpoint(this IEndpointRouteBuilder app)
    {
        //setting
        app.MapSerilogsEndpoints();
        app.MapCurrencyEndpoints();
        app.MapAutoNumberSequenceEndpoints();
        app.MapSystemUserEndpoints();
        app.MapCompanyEndpoints();
        app.MapTaxEndpoints();

        //profile
        app.MapPersonalInformationEndpoints();
        app.MapPasswordEndpoints();
        app.MapAvatarEndpoints();

        //root
        app.MapHomeEndpoints();

        //inventory
        app.MapUnitMeasureEndpoints();
        app.MapProductGroupEndpoints();
        app.MapWarehouseEndpoints();
        app.MapProductEndpoints();
        app.MapTransferOutEndpoints();  
        app.MapTransferInEndpoints();
        app.MapPositiveAdjustmentEndpoints();
        app.MapNegativeAdjustmentEndpoints();
        app.MapStockCountEndpoints();   
        app.MapScrappingEndpoints();
        app.MapTransactionReportEndpoints();
        app.MapStockReportEndpoints();
        app.MapMovementReportEndpoints();

        //thirdparty
        app.MapCustomerGroupEndpoints();
        app.MapCustomerCategoryEndpoints();
        app.MapCustomerEndpoints();
        app.MapCustomerContactEndpoints();
        app.MapVendorCategoryEndpoints();
        app.MapVendorGroupEndpoints();
        app.MapVendorEndpoints();
        app.MapVendorContactEndpoints();


        //utilities
        app.MapTodoEndpoints();
        app.MapBookingGroupEndpoints();
        app.MapBookingResourceEndpoints();
        app.MapBookingManagerEndpoints();
        app.MapBookingSchedulerEndpoints();
        app.MapProgramResourceEndpoints();
        app.MapProgramManagerEndpoints();

        //purchase
        app.MapPurchaseRequisitionEndpoints();
        app.MapPurchaseOrderEndpoints();
        app.MapGoodsReceiveEndpoints();
        app.MapPurchaseReturnEndpoints();
        app.MapPurchaseReportEndpoints();
        app.MapReceiveReportEndpoints();
        app.MapPurchaseReturnReportEndpoints();
        app.MapBillReportEndpoints();
        app.MapPaymentDisburseReportEndpoints();
        app.MapBillEndpoints();
        app.MapDebitNoteEndpoints();
        app.MapPaymentDisburseEndpoints();

        //sales
        app.MapSalesQuotationEndpoints();
        app.MapSalesOrderEndpoints();
        app.MapDeliveryOrderEndpoints();
        app.MapSalesReturnEndpoints();
        app.MapSalesReportEndpoints();
        app.MapDeliveryReportEndpoints();
        app.MapSalesReturnReportEndpoints();
        app.MapInvoiceReportEndpoints();
        app.MapPaymentReceiveReportEndpoints();
        app.MapInvoiceEndpoints();
        app.MapCreditNoteEndpoints();
        app.MapPaymentReceiveEndpoints();

        return app;
    }
}
