import { DEPUTY_ENUM } from './deputy';

interface Result {
  type: string;
  src: string;
  alt: string;
  thumbnail?: string;
}

export function importAll(r: any) {
  let images: string[] = [];
  r.keys().forEach((item: any) => {
    images.push(item);
  });
  return images;
}

export function getGalleryCarousel(id = ''): Result[] {
  let vidThumbs: string[] = [],
    vids: Result[] = [],
    images: Result[] = [];

  switch (id) {
    case DEPUTY_ENUM.SECRETARIAT: {
      vidThumbs = importAll(
        require.context(
          '../assets/gallery/sekutama/video thumbnail',
          false,
          /\.(png|jpe?g|svg)$/
        )
      ).map((image) => {
        const path: string = image.split('/')[1];
        return require(`../assets/gallery/sekutama/video thumbnail/${path}`);
      });
      vids = importAll(
        require.context(
          '../assets/gallery/sekutama/video',
          false,
          /\.(mp4|mkv|avi|mov)$/i
        )
      ).map((video, index) => {
        const path: string = video.split('/')[1];
        return {
          type: 'video',
          src: require(`../assets/gallery/sekutama/video/${path}`),
          alt: `Video-${index + 1}`,
          thumbnail: vidThumbs[index],
        };
      });

      images = importAll(
        require.context(
          '../assets/gallery/sekutama',
          false,
          /\.(png|jpe?g|svg)$/
        )
      ).map((image, index) => {
        const path: string = image.split('/')[1];
        return {
          type: 'img',
          src: require(`../assets/gallery/sekutama/${path}`),
          alt: `Photo-${index + 1}`,
        };
      });

      break;
    }

    case DEPUTY_ENUM.INSPECTORATE: {
      vidThumbs = importAll(
        require.context(
          '../assets/gallery/insputama/video thumbnail',
          false,
          /\.(png|jpe?g|svg)$/
        )
      ).map((image) => {
        const path: string = image.split('/')[1];
        return require(`../assets/gallery/insputama/video thumbnail/${path}`);
      });
      vids = importAll(
        require.context(
          '../assets/gallery/insputama/video',
          false,
          /\.(mp4|mkv|avi|mov)$/i
        )
      ).map((video, index) => {
        const path: string = video.split('/')[1];
        return {
          type: 'video',
          src: require(`../assets/gallery/insputama/video/${path}`),
          alt: `Video-${index + 1}`,
          thumbnail: vidThumbs[index],
        };
      });

      images = importAll(
        require.context(
          '../assets/gallery/insputama',
          false,
          /\.(png|jpe?g|svg)$/
        )
      ).map((image, index) => {
        const path: string = image.split('/')[1];
        return {
          type: 'img',
          src: require(`../assets/gallery/insputama/${path}`),
          alt: `Photo-${index + 1}`,
        };
      });

      break;
    }

    case DEPUTY_ENUM.REHAB: {
      vidThumbs = importAll(
        require.context(
          '../assets/gallery/rehab/video thumbnail',
          false,
          /\.(png|jpe?g|svg)$/
        )
      ).map((image) => {
        const path: string = image.split('/')[1];
        return require(`../assets/gallery/rehab/video thumbnail/${path}`);
      });
      vids = importAll(
        require.context(
          '../assets/gallery/rehab/video',
          false,
          /\.(mp4|mkv|avi|mov)$/i
        )
      ).map((video, index) => {
        const path: string = video.split('/')[1];
        return {
          type: 'video',
          src: require(`../assets/gallery/rehab/video/${path}`),
          alt: `Video-${index + 1}`,
          thumbnail: vidThumbs[index],
        };
      });

      images = importAll(
        require.context('../assets/gallery/rehab', false, /\.(png|jpe?g|svg)$/)
      ).map((image, index) => {
        const path: string = image.split('/')[1];
        return {
          type: 'img',
          src: require(`../assets/gallery/rehab/${path}`),
          alt: `Photo-${index + 1}`,
        };
      });

      break;
    }

    case DEPUTY_ENUM.LABORATORY: {
      vidThumbs = importAll(
        require.context(
          '../assets/gallery/lab/video thumbnail',
          false,
          /\.(png|jpe?g|svg)$/
        )
      ).map((image) => {
        const path: string = image.split('/')[1];
        return require(`../assets/gallery/lab/video thumbnail/${path}`);
      });
      vids = importAll(
        require.context(
          '../assets/gallery/lab/video',
          false,
          /\.(mp4|mkv|avi|mov)$/i
        )
      ).map((video, index) => {
        const path: string = video.split('/')[1];
        return {
          type: 'video',
          src: require(`../assets/gallery/lab/video/${path}`),
          alt: `Video-${index + 1}`,
          thumbnail: vidThumbs[index],
        };
      });

      images = importAll(
        require.context('../assets/gallery/lab', false, /\.(png|jpe?g|svg)$/)
      ).map((image, index) => {
        const path: string = image.split('/')[1];
        return {
          type: 'img',
          src: require(`../assets/gallery/lab/${path}`),
          alt: `Photo-${index + 1}`,
        };
      });

      break;
    }

    case DEPUTY_ENUM.PREVENTION: {
      vidThumbs = importAll(
        require.context(
          '../assets/gallery/prevention/video thumbnail',
          false,
          /\.(png|jpe?g|svg)$/
        )
      ).map((image) => {
        const path: string = image.split('/')[1];
        return require(`../assets/gallery/prevention/video thumbnail/${path}`);
      });
      vids = importAll(
        require.context(
          '../assets/gallery/prevention/video',
          false,
          /\.(mp4|mkv|avi|mov)$/i
        )
      ).map((video, index) => {
        const path: string = video.split('/')[1];
        return {
          type: 'video',
          src: require(`../assets/gallery/prevention/video/${path}`),
          alt: `Video-${index + 1}`,
          thumbnail: vidThumbs[index],
        };
      });

      images = importAll(
        require.context(
          '../assets/gallery/prevention',
          false,
          /\.(png|jpe?g|svg)$/
        )
      ).map((image, index) => {
        const path: string = image.split('/')[1];
        return {
          type: 'img',
          src: require(`../assets/gallery/prevention/${path}`),
          alt: `Photo-${index + 1}`,
        };
      });

      break;
    }

    case DEPUTY_ENUM.PUBLIC: {
      vidThumbs = importAll(
        require.context(
          '../assets/gallery/public/video thumbnail',
          false,
          /\.(png|jpe?g|svg)$/
        )
      ).map((image) => {
        const path: string = image.split('/')[1];
        return require(`../assets/gallery/public/video thumbnail/${path}`);
      });
      vids = importAll(
        require.context(
          '../assets/gallery/public/video',
          false,
          /\.(mp4|mkv|avi|mov)$/i
        )
      ).map((video, index) => {
        const path: string = video.split('/')[1];
        return {
          type: 'video',
          src: require(`../assets/gallery/public/video/${path}`),
          alt: `Video-${index + 1}`,
          thumbnail: vidThumbs[index],
        };
      });

      images = importAll(
        require.context('../assets/gallery/public', false, /\.(png|jpe?g|svg)$/)
      ).map((image, index) => {
        const path: string = image.split('/')[1];
        return {
          type: 'img',
          src: require(`../assets/gallery/public/${path}`),
          alt: `Photo-${index + 1}`,
        };
      });

      break;
    }

    case DEPUTY_ENUM.HRD: {
      vidThumbs = importAll(
        require.context(
          '../assets/gallery/hrd/video thumbnail',
          false,
          /\.(png|jpe?g|svg)$/
        )
      ).map((image) => {
        const path: string = image.split('/')[1];
        return require(`../assets/gallery/hrd/video thumbnail/${path}`);
      });
      vids = importAll(
        require.context(
          '../assets/gallery/hrd/video',
          false,
          /\.(mp4|mkv|avi|mov)$/i
        )
      ).map((video, index) => {
        const path: string = video.split('/')[1];
        return {
          type: 'video',
          src: require(`../assets/gallery/hrd/video/${path}`),
          alt: `Video-${index + 1}`,
          thumbnail: vidThumbs[index],
        };
      });

      images = importAll(
        require.context('../assets/gallery/hrd', false, /\.(png|jpe?g|svg)$/)
      ).map((image, index) => {
        const path: string = image.split('/')[1];
        return {
          type: 'img',
          src: require(`../assets/gallery/hrd/${path}`),
          alt: `Photo-${index + 1}`,
        };
      });

      break;
    }

    case DEPUTY_ENUM.RESEARCH: {
      vidThumbs = importAll(
        require.context(
          '../assets/gallery/puslitdatin/video thumbnail',
          false,
          /\.(png|jpe?g|svg)$/
        )
      ).map((image) => {
        const path: string = image.split('/')[1];
        return require(`../assets/gallery/puslitdatin/video thumbnail/${path}`);
      });
      vids = importAll(
        require.context(
          '../assets/gallery/puslitdatin/video',
          false,
          /\.(mp4|mkv|avi|mov)$/i
        )
      ).map((video, index) => {
        const path: string = video.split('/')[1];
        return {
          type: 'video',
          src: require(`../assets/gallery/puslitdatin/video/${path}`),
          alt: `Video-${index + 1}`,
          thumbnail: vidThumbs[index],
        };
      });

      images = importAll(
        require.context(
          '../assets/gallery/puslitdatin',
          false,
          /\.(png|jpe?g|svg)$/
        )
      ).map((image, index) => {
        const path: string = image.split('/')[1];
        return {
          type: 'img',
          src: require(`../assets/gallery/puslitdatin/${path}`),
          alt: `Photo-${index + 1}`,
        };
      });

      break;
    }

    case DEPUTY_ENUM.ERADICATION: {
      vidThumbs = importAll(
        require.context(
          '../assets/gallery/eradicate/video thumbnail',
          false,
          /\.(png|jpe?g|svg)$/
        )
      ).map((image) => {
        const path: string = image.split('/')[1];
        return require(`../assets/gallery/eradicate/video thumbnail/${path}`);
      });
      vids = importAll(
        require.context(
          '../assets/gallery/eradicate/video',
          false,
          /\.(mp4|mkv|avi|mov)$/i
        )
      ).map((video, index) => {
        const path: string = video.split('/')[1];
        return {
          type: 'video',
          src: require(`../assets/gallery/eradicate/video/${path}`),
          alt: `Video-${index + 1}`,
          thumbnail: vidThumbs[index],
        };
      });

      images = importAll(
        require.context(
          '../assets/gallery/eradicate',
          false,
          /\.(png|jpe?g|svg)$/
        )
      ).map((image, index) => {
        const path: string = image.split('/')[1];
        return {
          type: 'img',
          src: require(`../assets/gallery/eradicate/${path}`),
          alt: `Photo-${index + 1}`,
        };
      });

      break;
    }

    case DEPUTY_ENUM.LEGAL: {
      vidThumbs = importAll(
        require.context(
          '../assets/gallery/legal/video thumbnail',
          false,
          /\.(png|jpe?g|svg)$/
        )
      ).map((image) => {
        const path: string = image.split('/')[1];
        return require(`../assets/gallery/legal/video thumbnail/${path}`);
      });
      vids = importAll(
        require.context(
          '../assets/gallery/legal/video',
          false,
          /\.(mp4|mkv|avi|mov)$/i
        )
      ).map((video, index) => {
        const path: string = video.split('/')[1];
        return {
          type: 'video',
          src: require(`../assets/gallery/legal/video/${path}`),
          alt: `Video-${index + 1}`,
          thumbnail: vidThumbs[index],
        };
      });

      images = importAll(
        require.context('../assets/gallery/legal', false, /\.(png|jpe?g|svg)$/)
      ).map((image, index) => {
        const path: string = image.split('/')[1];
        return {
          type: 'img',
          src: require(`../assets/gallery/legal/${path}`),
          alt: `Photo-${index + 1}`,
        };
      });

      break;
    }

    default:
      return [];
  }

  return [...vids, ...images];
}

export function getDocumentByDeputy(id = '') {
  let files: { name: string; thumb: string; path: string }[] = [];
  let fileThumbs: string[] = [];

  switch (id) {
    case DEPUTY_ENUM.SECRETARIAT:
      fileThumbs = importAll(
        require.context(
          '../assets/gallery/sekutama/document thumbnail',
          false,
          /\.(png|jpe?g)$/
        )
      ).map((image) => {
        const path: string = image.split('/')[1];
        return require(`../assets/gallery/sekutama/document thumbnail/${path}`);
      });

      files = importAll(
        require.context('../assets/gallery/sekutama/document', false, /\.pdf$/i)
      ).map((file, index) => {
        const path: string = file.split('/')[1];
        const name = file.match(/([^/]+)\.pdf$/i)?.[1] || 'Document';
        return {
          name,
          thumb: fileThumbs[index],
          path: require(`../assets/gallery/sekutama/document/${path}`),
        };
      });
      break;

    case DEPUTY_ENUM.INSPECTORATE:
      fileThumbs = importAll(
        require.context(
          '../assets/gallery/insputama/document thumbnail',
          false,
          /\.(png|jpe?g)$/
        )
      ).map((image) => {
        const path: string = image.split('/')[1];
        return require(
          `../assets/gallery/insputama/document thumbnail/${path}`
        );
      });

      files = importAll(
        require.context(
          '../assets/gallery/insputama/document',
          false,
          /\.pdf$/i
        )
      ).map((file, index) => {
        const path: string = file.split('/')[1];
        const name = file.match(/([^/]+)\.pdf$/i)?.[1] || 'Document';
        return {
          name,
          thumb: fileThumbs[index],
          path: require(`../assets/gallery/insputama/document/${path}`),
        };
      });
      break;

    case DEPUTY_ENUM.REHAB:
      fileThumbs = importAll(
        require.context(
          '../assets/gallery/rehab/document thumbnail',
          false,
          /\.(png|jpe?g)$/
        )
      ).map((image) => {
        const path: string = image.split('/')[1];
        return require(`../assets/gallery/rehab/document thumbnail/${path}`);
      });

      files = importAll(
        require.context('../assets/gallery/rehab/document', false, /\.pdf$/i)
      ).map((file, index) => {
        const path: string = file.split('/')[1];
        const name = file.match(/([^/]+)\.pdf$/i)?.[1] || 'Document';
        return {
          name,
          thumb: fileThumbs[index],
          path: require(`../assets/gallery/rehab/document/${path}`),
        };
      });
      break;

    case DEPUTY_ENUM.LABORATORY:
      fileThumbs = importAll(
        require.context(
          '../assets/gallery/lab/document thumbnail',
          false,
          /\.(png|jpe?g)$/
        )
      ).map((image) => {
        const path: string = image.split('/')[1];
        return require(`../assets/gallery/lab/document thumbnail/${path}`);
      });

      files = importAll(
        require.context('../assets/gallery/lab/document', false, /\.pdf$/i)
      ).map((file, index) => {
        const path: string = file.split('/')[1];
        const name = file.match(/([^/]+)\.pdf$/i)?.[1] || 'Document';
        return {
          name,
          thumb: fileThumbs[index],
          path: require(`../assets/gallery/lab/document/${path}`),
        };
      });
      break;

    case DEPUTY_ENUM.ERADICATION:
      fileThumbs = importAll(
        require.context(
          '../assets/gallery/eradicate/document thumbnail',
          false,
          /\.(png|jpe?g)$/
        )
      ).map((image) => {
        const path: string = image.split('/')[1];
        return require(
          `../assets/gallery/eradicate/document thumbnail/${path}`
        );
      });

      files = importAll(
        require.context(
          '../assets/gallery/eradicate/document',
          false,
          /\.pdf$/i
        )
      ).map((file, index) => {
        const path: string = file.split('/')[1];
        const name = file.match(/([^/]+)\.pdf$/i)?.[1] || 'Document';
        return {
          name,
          thumb: fileThumbs[index],
          path: require(`../assets/gallery/eradicate/document/${path}`),
        };
      });
      break;

    case DEPUTY_ENUM.LEGAL:
      fileThumbs = importAll(
        require.context(
          '../assets/gallery/legal/document thumbnail',
          false,
          /\.(png|jpe?g)$/
        )
      ).map((image) => {
        const path: string = image.split('/')[1];
        return require(`../assets/gallery/legal/document thumbnail/${path}`);
      });

      files = importAll(
        require.context('../assets/gallery/legal/document', false, /\.pdf$/i)
      ).map((file, index) => {
        const path: string = file.split('/')[1];
        const name = file.match(/([^/]+)\.pdf$/i)?.[1] || 'Document';
        return {
          name,
          thumb: fileThumbs[index],
          path: require(`../assets/gallery/legal/document/${path}`),
        };
      });
      break;

    case DEPUTY_ENUM.PREVENTION:
      fileThumbs = importAll(
        require.context(
          '../assets/gallery/prevention/document thumbnail',
          false,
          /\.(png|jpe?g)$/
        )
      ).map((image) => {
        const path: string = image.split('/')[1];
        return require(
          `../assets/gallery/prevention/document thumbnail/${path}`
        );
      });

      files = importAll(
        require.context(
          '../assets/gallery/prevention/document',
          false,
          /\.pdf$/i
        )
      ).map((file, index) => {
        const path: string = file.split('/')[1];
        const name = file.match(/([^/]+)\.pdf$/i)?.[1] || 'Document';
        return {
          name,
          thumb: fileThumbs[index],
          path: require(`../assets/gallery/prevention/document/${path}`),
        };
      });
      break;

    case DEPUTY_ENUM.PUBLIC:
      fileThumbs = importAll(
        require.context(
          '../assets/gallery/public/document thumbnail',
          false,
          /\.(png|jpe?g)$/
        )
      ).map((image) => {
        const path: string = image.split('/')[1];
        return require(`../assets/gallery/public/document thumbnail/${path}`);
      });

      files = importAll(
        require.context('../assets/gallery/public/document', false, /\.pdf$/i)
      ).map((file, index) => {
        const path: string = file.split('/')[1];
        const name = file.match(/([^/]+)\.pdf$/i)?.[1] || 'Document';
        return {
          name,
          thumb: fileThumbs[index],
          path: require(`../assets/gallery/public/document/${path}`),
        };
      });
      break;

    case DEPUTY_ENUM.HRD:
      fileThumbs = importAll(
        require.context(
          '../assets/gallery/hrd/document thumbnail',
          false,
          /\.(png|jpe?g)$/
        )
      ).map((image) => {
        const path: string = image.split('/')[1];
        return require(`../assets/gallery/hrd/document thumbnail/${path}`);
      });

      files = importAll(
        require.context('../assets/gallery/hrd/document', false, /\.pdf$/i)
      ).map((file, index) => {
        const path: string = file.split('/')[1];
        const name = file.match(/([^/]+)\.pdf$/i)?.[1] || 'Document';
        return {
          name,
          thumb: fileThumbs[index],
          path: require(`../assets/gallery/hrd/document/${path}`),
        };
      });
      break;

    case DEPUTY_ENUM.RESEARCH:
      fileThumbs = importAll(
        require.context(
          '../assets/gallery/puslitdatin/document thumbnail',
          false,
          /\.(png|jpe?g)$/
        )
      ).map((image) => {
        const path: string = image.split('/')[1];
        return require(
          `../assets/gallery/puslitdatin/document thumbnail/${path}`
        );
      });

      files = importAll(
        require.context(
          '../assets/gallery/puslitdatin/document',
          false,
          /\.pdf$/i
        )
      ).map((file, index) => {
        const path: string = file.split('/')[1];
        const name = file.match(/([^/]+)\.pdf$/i)?.[1] || 'Document';
        return {
          name,
          thumb: fileThumbs[index],
          path: require(`../assets/gallery/puslitdatin/document/${path}`),
        };
      });
      break;
  }

  return files;
}
