import { Request, Response, NextFunction } from 'express';
import pick from '../pick';
import { MakanifySites } from '@/modules/makanifySites/makanifySites.model';
import { ApiError } from '../errors';
import { defaultStatus } from '../responseCode/httpStatusAlias';
import responseCodes from '@/shared/utils/responseCode/responseCode';
import { IWebSiteBuilderDoc } from '@/modules/makanifySites/makanifySites.interface';

const { MakanifySitesResponseCodes } = responseCodes;

export async function makanifyExtract(
  req: Request & { subdomainStr?: string; subdomain?: IWebSiteBuilderDoc },
  _res: Response,
  next: NextFunction,
) {
  try {
    const { subdomains: querySubs } = pick(req.query, ['subdomains']);

    const site = await MakanifySites.findOne({
      subdomainName: querySubs,
    });
    if (!site)
      throw new ApiError(
        defaultStatus.OK,
        'Site not found',
        true,
        '',
        MakanifySitesResponseCodes.MAKANIFYSITES_NOT_FOUND,
      );

    Object.assign(req, { subdomain: site });
    next();
  } catch (err) {
    next(err);
  }
}

export async function fetchMakanifySites(
  req: Request & { subdomain: IWebSiteBuilderDoc },
  _res: Response,
  next: NextFunction,
) {
  const { id } = req.user.company;

  let site = await MakanifySites.findOne({ company: id });

  if (!site)
    throw new ApiError(
      defaultStatus.OK,
      'Site not found',
      true,
      '',
      MakanifySitesResponseCodes.MAKANIFYSITES_NOT_FOUND,
    );

  Object.assign(req, { subdomain: site });
  next();
}
