import { Request, ResponseToolkit } from "@hapi/hapi";
import { Common } from "../../utils/common";
import { WordpressImportService } from "../services/wordpressImport.service";

export class WordpressImportHandler {
  private getWordpressImportServiceObject = async (request: Request) => {
    const variables = await Common.getVariables(request);
    return new WordpressImportService(variables);
  };

  importChunk = async (request: Request, h: ResponseToolkit) => {
    const payload = request.payload as WordpressImportRequestObject;
    const wordpressImportService = await this.getWordpressImportServiceObject(request);
    const responseData = await wordpressImportService.importChunk(payload);
    return h.response({ message: "REQUEST_PROCESSED_SUCCESSFULLY", responseData });
  };

  importUsers = async (request: Request, h: ResponseToolkit) => {
    const payload = request.payload as UserImportRequestObject;
    const wordpressImportService = await this.getWordpressImportServiceObject(request);
    const responseData = await wordpressImportService.importUsers(payload);
    return h.response({ message: "REQUEST_PROCESSED_SUCCESSFULLY", responseData });
  };

  importSeaQA = async (request: Request, h: ResponseToolkit) => {
    const payload = request.payload as SeaQAImportRequestObject;
    const wordpressImportService = await this.getWordpressImportServiceObject(request);
    const responseData = await wordpressImportService.importSeaQA(payload);
    return h.response({ message: "REQUEST_PROCESSED_SUCCESSFULLY", responseData });
  };

  importFollowers = async (request: Request, h: ResponseToolkit) => {
    const payload = request.payload as FollowerImportRequestObject;
    const wordpressImportService = await this.getWordpressImportServiceObject(request);
    const responseData = await wordpressImportService.importFollowers(payload);
    return h.response({ message: "REQUEST_PROCESSED_SUCCESSFULLY", responseData });
  };

  syncUserLoginData = async (request: Request, h: ResponseToolkit) => {
    const payload = request.payload as SyncUserLoginDataRequestObject;
    const wordpressImportService = await this.getWordpressImportServiceObject(request);
    const responseData = await wordpressImportService.syncUserLoginData(payload);
    return h.response({ message: "REQUEST_PROCESSED_SUCCESSFULLY", responseData });
  };
}
