// Create partnerNetwork service functions
import { Request, Response } from 'express';
import * as partnerNetworkService from '@/modules/partnerNetwork/partnerNetwork.service';
import catchAsync from '@/shared/utils/catchAsync';
import responseCodes from '@/shared/utils/responseCode/responseCode';
import { pick } from '@/shared/utils';

const { PartnerNetworkResponseCodes } = responseCodes;

export const getPartnerNetwork = catchAsync(
  async (req: Request, res: Response) => {
    const authUserId = req.user.id;
    const companyId = req.user.company.id;
    const filter = pick(req.query, ['search']);
    const options = pick(req.query, [
      'sortBy',
      'limit',
      'page',
      'fields',
      'populate',
      'includeTimeStamps',
      'alias',
    ]);

    const { type } = pick(req.query, ['type']);

    const partnerNetwork = await partnerNetworkService.queryPartnerNetwork(
      authUserId,
      companyId,
      type,
      filter,
      options,
    );
    res.success(
      partnerNetwork,
      PartnerNetworkResponseCodes.SUCCESS,
      'PartnerNetwork Fetched Successfully',
    );
  },
);

export const connectPartnerNetwork = catchAsync(
  async (req: Request, res: Response) => {
    const userId = req.user.id;
    const partnerNetwork = await partnerNetworkService.connectPartnerNetwork({
      senderId: userId,
      receiverId: req.body.receiverId,
      companyId: req.body.companyId,
    });
    res.success(
      partnerNetwork,
      PartnerNetworkResponseCodes.SUCCESS,
      'PartnerNetwork Connected Successfully',
    );
  },
);

export const updatePartnerNetworkRequest = catchAsync(
  async (req: Request, res: Response) => {
    const { id } = pick(req.params, ['id']);
    await partnerNetworkService.updatePartnerNetworkRequest(id, req.body);
    res.success(
      true,
      PartnerNetworkResponseCodes.SUCCESS,
      'PartnerNetwork Request Updated Successfully',
    );
  },
);

export const deletePartnerNetworkById = catchAsync(
  async (req: Request, res: Response) => {
    const { id } = pick(req.params, ['id']);

    await partnerNetworkService.deletePartnerNetworkById(id);
    res.success(true, PartnerNetworkResponseCodes.SUCCESS, 'PartnerNetwork Deleted Successfully');
  },
);
