import { RepositoryBase, IRepositoryBase } from '@tomei/general';
import { HirerChangeRequestRemoveHirerModel } from '../../models/hirer-change-request-remove-hirer.entity';

export class HirerChangeRequestRemoveHirerRepository
  extends RepositoryBase<HirerChangeRequestRemoveHirerModel>
  implements IRepositoryBase<HirerChangeRequestRemoveHirerModel>
{
  constructor() {
    super(HirerChangeRequestRemoveHirerModel);
  }

  async findByPk(
    id: string,
    transaction?: any,
  ): Promise<HirerChangeRequestRemoveHirerModel | null> {
    try {
      const result = await HirerChangeRequestRemoveHirerModel.findByPk(id, {
        transaction: transaction,
      });

      return result;
    } catch (error) {
      throw new Error(`An Error occured when fetching : ${error.message}`);
    }
  }

  async delete(removeHirerId: string, dbTransaction?: any) {
    try {
      const options = {
        where: {
          RemoveHirerId: removeHirerId,
        },
        transaction: dbTransaction,
      };
      await HirerChangeRequestRemoveHirerModel.destroy(options);
    } catch (error) {
      throw new Error(`An Error occured when delete : ${error.message}`);
    }
  }

  async findAndCountAll(options?: any) {
    try {
      let hcrRemoveHirers: any;
      if (options) {
        hcrRemoveHirers =
          await HirerChangeRequestRemoveHirerModel.findAndCountAll(options);
      } else {
        hcrRemoveHirers =
          await HirerChangeRequestRemoveHirerModel.findAndCountAll();
      }
      return hcrRemoveHirers;
    } catch (error) {
      throw new Error(`An Error occured when retriving : ${error.message}`);
    }
  }

  async findAll(options: any): Promise<HirerChangeRequestRemoveHirerModel[]> {
    try {
      const result = await HirerChangeRequestRemoveHirerModel.findAll(options);
      return result;
    } catch (error) {
      throw new Error(`An Error occured when fetching : ${error.message}`);
    }
  }
}
