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.Pipeline.Budget;
using Indotalent.Features.Pipeline.Campaign;
using Indotalent.Features.Pipeline.Expense;
using Indotalent.Features.Pipeline.Lead;
using Indotalent.Features.Pipeline.LeadActivity;
using Indotalent.Features.Pipeline.LeadContact;
using Indotalent.Features.Pipeline.SalesRepresentative;
using Indotalent.Features.Pipeline.SalesTeam;
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 FeaturesDI
{
    public static IServiceCollection AddFeaturesDI(this IServiceCollection services)
    {
        //Setting
        services.AddScoped<SerilogsService>();
        services.AddScoped<CurrencyService>();
        services.AddScoped<AutoNumberSequenceService>();
        services.AddScoped<SystemUserService>();
        services.AddScoped<CompanyService>();
        services.AddScoped<TaxService>();

        //profile
        services.AddScoped<PersonalInformationService>();
        services.AddScoped<PasswordService>();
        services.AddScoped<AvatarService>();


        //root
        services.AddScoped<HomeService>();

        //inventory
        services.AddScoped<UnitMeasureService>();
        services.AddScoped<ProductGroupService>();
        services.AddScoped<WarehouseService>();
        services.AddScoped<ProductService>();
        services.AddScoped<TransferOutService>();
        services.AddScoped<TransferInService>();
        services.AddScoped<PositiveAdjustmentService>();
        services.AddScoped<NegativeAdjustmentService>();
        services.AddScoped<StockCountService>();
        services.AddScoped<ScrappingService>();
        services.AddScoped<TransactionReportService>();
        services.AddScoped<StockReportService>();
        services.AddScoped<MovementReportService>();

        //thridparty
        services.AddScoped<CustomerGroupService>();
        services.AddScoped<CustomerCategoryService>();
        services.AddScoped<CustomerService>();
        services.AddScoped<CustomerContactService>();
        services.AddScoped<VendorCategoryService>();
        services.AddScoped<VendorGroupService>();
        services.AddScoped<VendorService>();
        services.AddScoped<VendorContactService>();

        //pipeline
        services.AddScoped<SalesTeamService>();
        services.AddScoped<SalesRepresentativeService>();
        services.AddScoped<CampaignService>();
        services.AddScoped<BudgetService>();
        services.AddScoped<ExpenseService>();
        services.AddScoped<LeadService>();
        services.AddScoped<LeadContactService>();
        services.AddScoped<LeadActivityService>();

        //utilities
        services.AddScoped<TodoService>();
        services.AddScoped<BookingGroupService>();
        services.AddScoped<BookingResourceService>();
        services.AddScoped<BookingManagerService>();
        services.AddScoped<BookingSchedulerService>();
        services.AddScoped<ProgramResourceService>();
        services.AddScoped<ProgramManagerService>();

        //purchase
        services.AddScoped<PurchaseRequisitionService>();
        services.AddScoped<PurchaseOrderService>();
        services.AddScoped<GoodsReceiveService>();
        services.AddScoped<PurchaseReturnService>();
        services.AddScoped<PurchaseReportService>();
        services.AddScoped<ReceiveReportService>();
        services.AddScoped<PurchaseReturnReportService>();
        services.AddScoped<BillReportService>();
        services.AddScoped<PaymentDisburseReportService>();
        services.AddScoped<BillService>();
        services.AddScoped<DebitNoteService>();
        services.AddScoped<PaymentDisburseService>();

        //sales
        services.AddScoped<SalesQuotationService>();
        services.AddScoped<SalesOrderService>();
        services.AddScoped<DeliveryOrderService>();
        services.AddScoped<SalesReturnService>();
        services.AddScoped<SalesReportService>();
        services.AddScoped<DeliveryReportService>();
        services.AddScoped<SalesReturnReportService>();
        services.AddScoped<InvoiceReportService>();
        services.AddScoped<PaymentReceiveReportService>();
        services.AddScoped<InvoiceService>();
        services.AddScoped<CreditNoteService>();
        services.AddScoped<PaymentReceiveService>();


        return services;
    }
}
