import type { IMembershipChargeCenterRepository } from "./membership-club-charge-center.interfaces";

interface TMemberChargeCenterServicesDeps {
  MembershipClubChargeCenterRepository: IMembershipChargeCenterRepository;
}

export const MemberChargeCenterServices = ({
  MembershipClubChargeCenterRepository,
}: TMemberChargeCenterServicesDeps) => {
  const CreateMemberChargeCenter = async (
    name: string,
    currency: string,
    viewpoint_charge_center_id: string,
    note?: string,
  ) => {
    try {
      const newMemberChargeCenter =
        await MembershipClubChargeCenterRepository.CreateMembershipChargeCenter(
          name,
          currency,
          viewpoint_charge_center_id,
          note,
        );
      return newMemberChargeCenter;
    } catch (err) {
      throw err;
    }
  };

  const SearchMembershipChargeCenters = async () => {
    try {
      const records =
        await MembershipClubChargeCenterRepository.SearchMembershipChargeCenters();
      return records;
    } catch (err) {
      throw err;
    }
  };

  const FindMembershipChargeCenter = async (id: string) => {
    try {
      const record =
        await MembershipClubChargeCenterRepository.FindMembershipChargeCenter(
          id,
        );
      return record;
    } catch (err) {
      throw err;
    }
  };

  const UpdateMembershipChargeCenter = async (
    id: string,
    entry: {
      name?: string;
      currency?: string;
      viewpoint_charge_center_id?: string;
      note?: string;
    },
  ) => {
    try {
      const updatedRecord =
        await MembershipClubChargeCenterRepository.UpdateMembershipChargeCenter(
          id,
          entry,
        );
      return updatedRecord;
    } catch (err) {
      throw err;
    }
  };

  const RemoveMembershipChargeCenter = async (id: string) => {
    try {
      await MembershipClubChargeCenterRepository.RemoveMembershipChargeCenter(
        id,
      );
    } catch (err) {
      throw err;
    }
  };

  return {
    CreateMemberChargeCenter,
    SearchMembershipChargeCenters,
    FindMembershipChargeCenter,
    UpdateMembershipChargeCenter,
    RemoveMembershipChargeCenter,
  };
};
