#pragma once

#include "common/option.h"

typedef enum FFPackagesFlags: uint64_t {
    FF_PACKAGES_FLAG_NONE = 0,
    FF_PACKAGES_FLAG_APK_BIT = UINT64_C(1) << 0U,
    FF_PACKAGES_FLAG_BREW_BIT = UINT64_C(1) << 1U,
    FF_PACKAGES_FLAG_CHOCO_BIT = UINT64_C(1) << 2U,
    FF_PACKAGES_FLAG_DPKG_BIT = UINT64_C(1) << 3U,
    FF_PACKAGES_FLAG_EMERGE_BIT = UINT64_C(1) << 4U,
    FF_PACKAGES_FLAG_EOPKG_BIT = UINT64_C(1) << 5U,
    FF_PACKAGES_FLAG_FLATPAK_BIT = UINT64_C(1) << 6U,
    FF_PACKAGES_FLAG_NIX_BIT = UINT64_C(1) << 7U,
    FF_PACKAGES_FLAG_OPKG_BIT = UINT64_C(1) << 8U,
    FF_PACKAGES_FLAG_PACMAN_BIT = UINT64_C(1) << 9U,
    FF_PACKAGES_FLAG_PALUDIS_BIT = UINT64_C(1) << 10U,
    FF_PACKAGES_FLAG_PKG_BIT = UINT64_C(1) << 11U,
    FF_PACKAGES_FLAG_PKGTOOL_BIT = UINT64_C(1) << 12U,
    FF_PACKAGES_FLAG_MACPORTS_BIT = UINT64_C(1) << 13U,
    FF_PACKAGES_FLAG_RPM_BIT = UINT64_C(1) << 14U,
    FF_PACKAGES_FLAG_SCOOP_BIT = UINT64_C(1) << 15U,
    FF_PACKAGES_FLAG_SNAP_BIT = UINT64_C(1) << 16U,
    FF_PACKAGES_FLAG_WINGET_BIT = UINT64_C(1) << 17U,
    FF_PACKAGES_FLAG_XBPS_BIT = UINT64_C(1) << 18U,
    FF_PACKAGES_FLAG_AM_BIT = UINT64_C(1) << 19U,
    FF_PACKAGES_FLAG_SORCERY_BIT = UINT64_C(1) << 20U,
    FF_PACKAGES_FLAG_LPKG_BIT = UINT64_C(1) << 21U,
    FF_PACKAGES_FLAG_LPKGBUILD_BIT = UINT64_C(1) << 22U,
    FF_PACKAGES_FLAG_GUIX_BIT = UINT64_C(1) << 23U,
    FF_PACKAGES_FLAG_LINGLONG_BIT = UINT64_C(1) << 24U,
    FF_PACKAGES_FLAG_PACSTALL_BIT = UINT64_C(1) << 25U,
    FF_PACKAGES_FLAG_MPORT_BIT = UINT64_C(1) << 26U,
    FF_PACKAGES_FLAG_PKGSRC_BIT = UINT64_C(1) << 27U,
    FF_PACKAGES_FLAG_HPKG_BIT = UINT64_C(1) << 28U,
    FF_PACKAGES_FLAG_PISI_BIT = UINT64_C(1) << 29U,
    FF_PACKAGES_FLAG_SOAR_BIT = UINT64_C(1) << 30U,
    FF_PACKAGES_FLAG_KISS_BIT = UINT64_C(1) << 31U,
    FF_PACKAGES_FLAG_MOSS_BIT = UINT64_C(1) << 32U,
    FF_PACKAGES_FLAG_APPIMAGE_BIT = UINT64_C(1) << 33U,
    FF_PACKAGES_FLAG_CARDS_BIT = UINT64_C(1) << 34U,
    FF_PACKAGES_FLAG_PORG_BIT = UINT64_C(1) << 35U,
    FF_PACKAGES_FLAG_INSTALLRELEASE_BIT = UINT64_C(1) << 36U,
} FFPackagesFlags;
static_assert(sizeof(FFPackagesFlags) == sizeof(uint64_t), "");

typedef struct FFPackagesOptions {
    FFModuleArgs moduleArgs;

#if !FF_PACKAGES_REMOVE_DISABLED
    FFPackagesFlags disabled;
#endif
    bool combined;
} FFPackagesOptions;

static_assert(sizeof(FFPackagesOptions) <= FF_OPTION_MAX_SIZE, "FFPackagesOptions size exceeds maximum allowed size");
