using AyaNova.Util;
using AyaNova.Models;


namespace AyaNova.Biz
{


    internal static class BizObjectFactory
    {


        //Returns the biz object class that corresponds to the type presented
        //Used by SEARCH and objects with JOBS
        internal static BizObject GetBizObject(AyaType ayaType, AyContext ct, long userId = 1, AuthorizationRoles roles = AuthorizationRoles.All)
        {

            switch (ayaType)
            {
                //CoreBizObject add here
                case AyaType.ServerJob:
                    return new JobOperationsBiz(ct, userId, roles);
                case AyaType.TrialSeeder:
                    return new TrialBiz(ct, userId, roles);
                case AyaType.Translation:
                    return new TranslationBiz(ct, userId, ServerBootConfig.AYANOVA_DEFAULT_TRANSLATION_ID, roles);
                case AyaType.DataListView:
                    return new DataListViewBiz(ct, userId, ServerBootConfig.AYANOVA_DEFAULT_TRANSLATION_ID, roles);
                case AyaType.FormCustom:
                    return new FormCustomBiz(ct, userId, ServerBootConfig.AYANOVA_DEFAULT_TRANSLATION_ID, roles);
                case AyaType.Widget:
                    return new WidgetBiz(ct, userId, ServerBootConfig.AYANOVA_DEFAULT_TRANSLATION_ID, roles);
                case AyaType.FileAttachment:
                    return new AttachmentBiz(ct, userId, roles);
                case AyaType.Customer:
                    return new CustomerBiz(ct, userId, ServerBootConfig.AYANOVA_DEFAULT_TRANSLATION_ID, roles);
                case AyaType.User:
                    return new UserBiz(ct, userId, ServerBootConfig.AYANOVA_DEFAULT_TRANSLATION_ID, roles);


                case AyaType.Contract:
                    return new ContractBiz(ct, userId, ServerBootConfig.AYANOVA_DEFAULT_TRANSLATION_ID, roles);
                case AyaType.HeadOffice:
                    return new HeadOfficeBiz(ct, userId, ServerBootConfig.AYANOVA_DEFAULT_TRANSLATION_ID, roles);
                case AyaType.LoanUnit:
                    return new LoanUnitBiz(ct, userId, ServerBootConfig.AYANOVA_DEFAULT_TRANSLATION_ID, roles);
                case AyaType.Part:
                    return new PartBiz(ct, userId, ServerBootConfig.AYANOVA_DEFAULT_TRANSLATION_ID, roles);
                case AyaType.PM:
                    return new PMBiz(ct, userId, ServerBootConfig.AYANOVA_DEFAULT_TRANSLATION_ID, roles);

                case AyaType.PMTemplate:
                    return new PMTemplateBiz(ct, userId, ServerBootConfig.AYANOVA_DEFAULT_TRANSLATION_ID, roles);

                case AyaType.Project:
                    return new ProjectBiz(ct, userId, ServerBootConfig.AYANOVA_DEFAULT_TRANSLATION_ID, roles);
                case AyaType.PurchaseOrder:
                    return new PurchaseOrderBiz(ct, userId, ServerBootConfig.AYANOVA_DEFAULT_TRANSLATION_ID, roles);
                case AyaType.Quote:
                    return new QuoteBiz(ct, userId, ServerBootConfig.AYANOVA_DEFAULT_TRANSLATION_ID, roles);

                case AyaType.QuoteTemplate:
                    return new QuoteTemplateBiz(ct, userId, ServerBootConfig.AYANOVA_DEFAULT_TRANSLATION_ID, roles);

                case AyaType.Unit:
                    return new UnitBiz(ct, userId, ServerBootConfig.AYANOVA_DEFAULT_TRANSLATION_ID, roles);
                case AyaType.UnitModel:
                    return new UnitModelBiz(ct, userId, ServerBootConfig.AYANOVA_DEFAULT_TRANSLATION_ID, roles);
                case AyaType.Vendor:
                    return new VendorBiz(ct, userId, ServerBootConfig.AYANOVA_DEFAULT_TRANSLATION_ID, roles);
                //--- WorkOrder
                case AyaType.WorkOrder:
                case AyaType.WorkOrderItem:
                case AyaType.WorkOrderItemExpense:
                case AyaType.WorkOrderItemLabor:
                case AyaType.WorkOrderItemLoan:
                case AyaType.WorkOrderItemPart:
                case AyaType.WorkOrderItemPartRequest:
                case AyaType.WorkOrderItemScheduledUser:
                case AyaType.WorkOrderItemTask:
                case AyaType.WorkOrderItemTravel:
                case AyaType.WorkOrderItemUnit:
                    return new WorkOrderBiz(ct, userId, ServerBootConfig.AYANOVA_DEFAULT_TRANSLATION_ID, roles);
                //---
                case AyaType.WorkOrderTemplate:
                    return new WorkOrderTemplateBiz(ct, userId, ServerBootConfig.AYANOVA_DEFAULT_TRANSLATION_ID, roles);

                default:
                    throw new System.NotSupportedException($"AyaNova.BLL.BizObjectFactory::GetBizObject type {ayaType.ToString()} is not supported");
            }


        }


        /////////////////////////////////////////////////////////////////////

    }//eoc


}//eons

