import 'package:mohem_flutter_app/api/api_client.dart';
import 'package:mohem_flutter_app/app_state/app_state.dart';
import 'package:mohem_flutter_app/classes/consts.dart';
import 'package:mohem_flutter_app/models/generic_response_model.dart';
import 'package:mohem_flutter_app/models/vacation_rule/create_vacation_rule_list_model.dart';
import 'package:mohem_flutter_app/models/vacation_rule/get_item_type_notifications_list_model.dart';
import 'package:mohem_flutter_app/models/vacation_rule/get_notification_reassign_mode_list_model.dart';
import 'package:mohem_flutter_app/models/vacation_rule/get_vacation_rules_list_model.dart';
import 'package:mohem_flutter_app/models/vacation_rule/vr_item_types_list_model.dart';
import 'package:mohem_flutter_app/models/vacation_rule/wf_look_up_list_model.dart';

class VacationRuleApiClient {
  static final VacationRuleApiClient _instance = VacationRuleApiClient._internal();

  VacationRuleApiClient._internal();

  factory VacationRuleApiClient() => _instance;

  Future<List<GetVacationRulesList>> getVacationRules() async {
    String url = "${ApiConsts.erpRest}GET_VACATION_RULES";
    Map<String, dynamic> postParams = {"P_PAGE_LIMIT": 50, "P_PAGE_NUM": 1};
    postParams.addAll(AppState().postParamsJson);
    return await ApiClient().postJsonForObject((json) {
      GenericResponseModel? responseData = GenericResponseModel.fromJson(json);
      return responseData.getVacationRulesList ?? [];
    }, url, postParams);
  }

  Future<List<VrItemTypesList>> getVrItemTypes() async {
    String url = "${ApiConsts.erpRest}GET_VR_ITEM_TYPES";
    Map<String, dynamic> postParams = {};
    postParams.addAll(AppState().postParamsJson);
    return await ApiClient().postJsonForObject((json) {
      GenericResponseModel? responseData = GenericResponseModel.fromJson(json);
      return responseData.vrItemTypesList ?? [];
    }, url, postParams);
  }

  Future<List<GetItemTypeNotificationsList>> getItemTypeNotifications(String pItemType) async {
    String url = "${ApiConsts.erpRest}GET_ITEM_TYPE_NOTIFICATIONS";
    Map<String, dynamic> postParams = {"P_ITEM_TYPE": pItemType};
    postParams.addAll(AppState().postParamsJson);
    return await ApiClient().postJsonForObject((json) {
      GenericResponseModel? responseData = GenericResponseModel.fromJson(json);
      return responseData.getItemTypeNotificationsList ?? [];
    }, url, postParams);
  }

  Future<List<GetNotificationReassignModeList>> getNotificationReassignMode() async {
    String url = "${ApiConsts.erpRest}GET_NOTIFICATION_REASSIGN_MODE";
    Map<String, dynamic> postParams = {};
    postParams.addAll(AppState().postParamsJson);
    return await ApiClient().postJsonForObject((json) {
      GenericResponseModel? responseData = GenericResponseModel.fromJson(json);
      return responseData.getNotificationReassignModeList ?? [];
    }, url, postParams);
  }

  Future<GenericResponseModel> getRespondAttributes(String pItemType, String pNotificationName) async {
    String url = "${ApiConsts.erpRest}GET_RESPOND_ATTRIBUTES";
    Map<String, dynamic> postParams = {"P_ITEM_TYPE": pItemType, "P_NOTIFICATION_NAME": pNotificationName};
    postParams.addAll(AppState().postParamsJson);
    return await ApiClient().postJsonForObject((json) {
      GenericResponseModel? responseData = GenericResponseModel.fromJson(json);
      return responseData;
    }, url, postParams);
  }

  Future<CreateVacationRuleList?> createVacationRule(String pBeginDate, String pEndDate, String pItemType, String pNotificationName, String pMessage, String pAction, String pReplacementUserName,
      List<Map<String, dynamic>> respondAttributeList) async {
    String url = "${ApiConsts.erpRest}CREATE_VACATION_RULE";
    Map<String, dynamic> postParams = {
      "P_ITEM_TYPE": pItemType,
      "P_NOTIFICATION_NAME": pNotificationName,
      "P_BEGIN_DATE": pBeginDate,
      "P_END_DATE": pEndDate,
      "P_MESSAGE": pMessage,
      "P_REPLACEMENT_USER_NAME": pReplacementUserName,
      "P_ACTION": pAction,
      "RespondAttributeList": respondAttributeList,
    };
    postParams.addAll(AppState().postParamsJson);
    return await ApiClient().postJsonForObject((json) {
      GenericResponseModel? responseData = GenericResponseModel.fromJson(json);
      return responseData.createVacationRuleList;
    }, url, postParams);
  }

  Future<List<WFLookUpList>> getWfLookup(String pLookupType) async {
    String url = "${ApiConsts.erpRest}GET_WF_LOOKUP";
    Map<String, dynamic> postParams = {"P_LOOKUP_TYPE": pLookupType};
    postParams.addAll(AppState().postParamsJson);
    return await ApiClient().postJsonForObject((json) {
      GenericResponseModel? responseData = GenericResponseModel.fromJson(json);
      return responseData.wFLookUpList ?? [];
    }, url, postParams);
  }
}
