#pragma once

#if !defined(yekneb_FileLocatorCandidates_Header_3a0026a3d4194734b1c771cefdb82bcd) // {
#define yekneb_FileLocatorCandidates_Header_3a0026a3d4194734b1c771cefdb82bcd 1

#include <cstdint>
#include <string>
#include <tuple>
#include <vector>

#include "ConstantString.h"

namespace yekneb::detail::FileLocator {

// NOLINTBEGIN(cppcoreguidelines-avoid-c-arrays,modernize-avoid-c-arrays)
template<std::size_t... N>
consteval auto MakeConstantStringTuple(const char (&...values)[N])
{
    return std::tuple<yekneb::ConstantString<N>...>{yekneb::ConstantString<N>{values}...};
}
// NOLINTEND(cppcoreguidelines-avoid-c-arrays,modernize-avoid-c-arrays)

template<typename CharType, typename... ValueTypes>
std::vector<std::basic_string<CharType>> CandidateValuesToVector(
    const std::tuple<ValueTypes...>& values)
{
    using string_type = typename std::basic_string<CharType>;
    using vector_type = typename std::vector<string_type>;
    vector_type candidates{};
    candidates.reserve(sizeof...(ValueTypes));
    std::apply(
        [&candidates](const auto&... value)
        {
            (candidates.push_back(::yekneb::GetAs<CharType>(value)), ...);
        },
        values);
    return candidates;
}

struct bindirCandidates
{
    static constexpr auto values{MakeConstantStringTuple(
        "${exec_prefix}/bin/${architecture}",
        "${exec_prefix}/bin/${machine}",
        "${exec_prefix}/bin"
    )};
    static constexpr yekneb::ConstantString defaultValue{"${exec_dir}"};
};

struct libexecdirCandidates
{
    static constexpr auto values{MakeConstantStringTuple(
        "${exec_prefix}/libexec/${company_name}/${application_name}/${architecture}/${version}",
        "${exec_prefix}/libexec/${company_name}/${application_name}/${machine}/${version}",
        "${exec_prefix}/libexec/${company_name}/${application_name}/${version}/${architecture}",
        "${exec_prefix}/libexec/${company_name}/${application_name}/${version}/${machine}",
        "${exec_prefix}/libexec/${company_name}/${application_name}/${architecture}",
        "${exec_prefix}/libexec/${company_name}/${application_name}/${machine}",
        "${exec_prefix}/libexec/${application_name}/${architecture}/${version}",
        "${exec_prefix}/libexec/${application_name}/${machine}/${version}",
        "${exec_prefix}/libexec/${application_name}/${version}/${architecture}",
        "${exec_prefix}/libexec/${application_name}/${version}/${machine}",
        "${exec_prefix}/libexec/${application_name}/${architecture}",
        "${exec_prefix}/libexec/${application_name}/${machine}",
        "${exec_prefix}/libexec/${architecture}/${company_name}/${application_name}/${version}",
        "${exec_prefix}/libexec/${machine}/${company_name}/${application_name}/${version}",
        "${exec_prefix}/libexec/${architecture}/${application_name}/${version}",
        "${exec_prefix}/libexec/${machine}/${application_name}/${version}",
        "${exec_prefix}/libexec/${architecture}/${company_name}/${application_name}",
        "${exec_prefix}/libexec/${machine}/${company_name}/${application_name}",
        "${exec_prefix}/libexec/${architecture}/${application_name}",
        "${exec_prefix}/libexec/${machine}/${application_name}",
        "${exec_prefix}/libexec/${architecture}",
        "${exec_prefix}/libexec/${machine}",
        "${exec_prefix}/libexec/${company_name}/${application_name}/${version}",
        "${exec_prefix}/libexec/${company_name}/${application_name}",
        "${exec_prefix}/libexec/${application_name}/${version}",
        "${exec_prefix}/libexec/${application_name}",
        "${exec_prefix}/libexec"
    )};
    static constexpr yekneb::ConstantString defaultValue{"${exec_prefix}/libexec"};
};

struct sbindirCandidates
{
    static constexpr auto values{MakeConstantStringTuple(
        "${exec_prefix}/sbin/${architecture}",
        "${exec_prefix}/sbin/${machine}",
        "${exec_prefix}/sbin"
    )};
    static constexpr yekneb::ConstantString defaultValue{"${exec_dir}"};
};

struct datarootdirCandidates
{
    static constexpr auto values{MakeConstantStringTuple(
        "${prefix}/share/${company_name}/${application_name}/${version}",
        "${prefix}/share/${application_name}/${version}",
        "${prefix}/share/${company_name}/${application_name}",
        "${prefix}/share/${application_name}",
        "${CommonAppDataFolder}/share/${company_name}/${application_name}/${version}",
        "${CommonAppDataFolder}/share/${application_name}/${version}",
        "${CommonAppDataFolder}/share/${company_name}/${application_name}",
        "${CommonAppDataFolder}/share/${application_name}",
        "${CommonAppDataFolder}/${company_name}/${application_name}/${version}/share",
        "${CommonAppDataFolder}/${application_name}/${version}/share",
        "${CommonAppDataFolder}/${company_name}/${application_name}/share",
        "${CommonAppDataFolder}/${application_name}/share",
        "${CommonAppDataFolder}/${company_name}/${application_name}/${version}",
        "${CommonAppDataFolder}/${application_name}/${version}",
        "${CommonAppDataFolder}/${company_name}/${application_name}",
        "${CommonAppDataFolder}/${application_name}"
    )};
    static constexpr yekneb::ConstantString defaultValue{"${prefix}/share"};
};

struct datadirCandidates
{
    static constexpr yekneb::ConstantString defaultValue{"${datarootdir}"};
};

struct sysconfdirCandidates
{
    static constexpr auto values{MakeConstantStringTuple(
        "${prefix}/etc/${company_name}/${application_name}/${version}",
        "${prefix}/etc/${application_name}/${version}",
        "${prefix}/etc/${company_name}/${application_name}",
        "${prefix}/etc/${application_name}",
        "${CommonAppDataFolder}/${company_name}/${application_name}/${version}/etc",
        "${CommonAppDataFolder}/${company_name}/${application_name}/${version}/settings",
        "${CommonAppDataFolder}/${application_name}/${version}/etc",
        "${CommonAppDataFolder}/${application_name}/${version}/settings",
        "${CommonAppDataFolder}/${company_name}/${application_name}/etc",
        "${CommonAppDataFolder}/${company_name}/${application_name}/settings",
        "${CommonAppDataFolder}/${application_name}/etc",
        "${CommonAppDataFolder}/${application_name}/settings",
        "${CommonAppDataFolder}/${company_name}/${application_name}/${version}",
        "${CommonAppDataFolder}/${application_name}/${version}",
        "${CommonAppDataFolder}/${company_name}/${application_name}",
        "${CommonAppDataFolder}/${application_name}"
    )};
    static constexpr yekneb::ConstantString defaultValue{"${prefix}/etc"};
};

struct userconfdirCandidates
{
    static constexpr auto values{MakeConstantStringTuple(
        "${HOME}/.config/${company_name}/${application_name}/${version}",
        "${HOME}/.config/${application_name}/${version}",
        "${HOME}/.config/${company_name}/${application_name}",
        "${HOME}/.config/${application_name}",
        "${HOME}/.local/share/${company_name}/${application_name}/${version}",
        "${HOME}/.local/share/${application_name}/${version}",
        "${HOME}/.local/share/${company_name}/${application_name}",
        "${HOME}/.local/share/${application_name}",
        "${HOME}/${company_name}/${application_name}/${version}/settings",
        "${HOME}/${application_name}/${version}/settings",
        "${HOME}/${company_name}/${application_name}/settings",
        "${HOME}/${application_name}/settings",
        "${HOME}/${company_name}/${application_name}/${version}",
        "${HOME}/${application_name}/${version}",
        "${HOME}/${company_name}/${application_name}",
        "${HOME}/${application_name}",
        "${HOME}/.config",
        "${AppDataFolder}/${company_name}/${application_name}/${version}/settings",
        "${AppDataFolder}/${application_name}/${version}/settings",
        "${AppDataFolder}/${company_name}/${application_name}/settings",
        "${AppDataFolder}/${application_name}/settings",
        "${AppDataFolder}/${company_name}/${application_name}/${version}",
        "${AppDataFolder}/${application_name}/${version}",
        "${AppDataFolder}/${company_name}/${application_name}",
        "${AppDataFolder}/${application_name}",
        "${LocalAppDataFolder}/${company_name}/${application_name}/${version}/settings",
        "${LocalAppDataFolder}/${application_name}/${version}/settings",
        "${LocalAppDataFolder}/${company_name}/${application_name}/settings",
        "${LocalAppDataFolder}/${application_name}/settings",
        "${LocalAppDataFolder}/${company_name}/${application_name}/${version}",
        "${LocalAppDataFolder}/${application_name}/${version}",
        "${LocalAppDataFolder}/${company_name}/${application_name}",
        "${LocalAppDataFolder}/${application_name}"
    )};
    static constexpr yekneb::ConstantString defaultValue{"${HOME}"};
};

struct sharedstatedirCandidates
{
    static constexpr yekneb::ConstantString defaultValue{"${prefix}/com"};
};

struct localstatedirCandidates
{
    static constexpr auto values{MakeConstantStringTuple(
        "/var"
    )};
    static constexpr yekneb::ConstantString defaultValue{"${prefix}/var"};
};

struct runstatedirCandidates
{
    static constexpr auto values{MakeConstantStringTuple(
        "/run",
        "/var/run"
    )};
    static constexpr yekneb::ConstantString defaultValue{"${localstatedir}/run"};
};

struct includedirCandidates
{
    static constexpr auto values{MakeConstantStringTuple(
        "${prefix}/include/${company_name}/${application_name}/${version}",
        "${prefix}/include/${application_name}/${version}",
        "${prefix}/include/${company_name}/${application_name}",
        "${prefix}/include/${application_name}"
    )};
    static constexpr yekneb::ConstantString defaultValue{"${prefix}/include"};
};

struct docdirCandidates
{
    static constexpr auto values{MakeConstantStringTuple(
        "${datarootdir}/doc/${company_name}/${application_name}/${version}",
        "${datarootdir}/doc/${application_name}/${version}",
        "${datarootdir}/doc/${company_name}/${application_name}",
        "${datarootdir}/doc/${application_name}",
        "${datarootdir}/docs/${company_name}/${application_name}/${version}",
        "${datarootdir}/docs/${application_name}/${version}",
        "${datarootdir}/docs/${company_name}/${application_name}",
        "${datarootdir}/docs/${application_name}",
        "${AppDataFolder}/${company_name}/${application_name}/${version}/docs",
        "${AppDataFolder}/${application_name}/${version}/docs",
        "${AppDataFolder}/${company_name}/${application_name}/docs",
        "${AppDataFolder}/${application_name}/docs",
        "${LocalAppDataFolder}/${company_name}/${application_name}/${version}/docs",
        "${LocalAppDataFolder}/${application_name}/${version}/docs",
        "${LocalAppDataFolder}/${company_name}/${application_name}/docs",
        "${LocalAppDataFolder}/${application_name}/docs",
        "${AppDataFolder}/${company_name}/${application_name}/${version}/doc",
        "${AppDataFolder}/${application_name}/${version}/doc",
        "${AppDataFolder}/${company_name}/${application_name}/doc",
        "${AppDataFolder}/${application_name}/doc",
        "${LocalAppDataFolder}/${company_name}/${application_name}/${version}/doc",
        "${LocalAppDataFolder}/${application_name}/${version}/doc",
        "${LocalAppDataFolder}/${company_name}/${application_name}/doc",
        "${LocalAppDataFolder}/${application_name}/doc"
    )};
    static constexpr yekneb::ConstantString defaultValue{"${datarootdir}/doc"};
};

struct infodirCandidates
{
    static constexpr auto values{MakeConstantStringTuple(
        "${datarootdir}/info/${company_name}/${application_name}/${version}",
        "${datarootdir}/info/${application_name}/${version}",
        "${datarootdir}/info/${company_name}/${application_name}",
        "${datarootdir}/info/${application_name}",
        "${AppDataFolder}/${company_name}/${application_name}/${version}/info",
        "${AppDataFolder}/${application_name}/${version}/info",
        "${AppDataFolder}/${company_name}/${application_name}/info",
        "${AppDataFolder}/${application_name}/info",
        "${LocalAppDataFolder}/${company_name}/${application_name}/${version}/info",
        "${LocalAppDataFolder}/${application_name}/${version}/info",
        "${LocalAppDataFolder}/${company_name}/${application_name}/info",
        "${LocalAppDataFolder}/${application_name}/info"
    )};
    static constexpr yekneb::ConstantString defaultValue{"${datarootdir}/info"};
};

struct htmldirCandidates
{
    static constexpr auto values{MakeConstantStringTuple(
        "${docdir}/html"
    )};
    static constexpr yekneb::ConstantString defaultValue{"${docdir}"};
};

struct dvidirCandidates
{
    static constexpr auto values{MakeConstantStringTuple(
        "${docdir}/dvi"
    )};
    static constexpr yekneb::ConstantString defaultValue{"${docdir}"};
};

struct pdfdirCandidates
{
    static constexpr auto values{MakeConstantStringTuple(
        "${docdir}/pdf"
    )};
    static constexpr yekneb::ConstantString defaultValue{"${docdir}"};
};

struct psdirCandidates
{
    static constexpr auto values{MakeConstantStringTuple(
        "${docdir}/ps"
    )};
    static constexpr yekneb::ConstantString defaultValue{"${docdir}"};
};

struct libdirCandidates
{
    static constexpr auto values{MakeConstantStringTuple(
        "${exec_prefix}/lib/${company_name}/${application_name}/${architecture}/${version}",
        "${exec_prefix}/lib/${company_name}/${application_name}/${machine}/${version}",
        "${exec_prefix}/lib/${company_name}/${application_name}/${version}/${architecture}",
        "${exec_prefix}/lib/${company_name}/${application_name}/${version}/${machine}",
        "${exec_prefix}/lib/${company_name}/${application_name}/${architecture}",
        "${exec_prefix}/lib/${company_name}/${application_name}/${machine}",
        "${exec_prefix}/lib/${application_name}/${architecture}/${version}",
        "${exec_prefix}/lib/${application_name}/${machine}/${version}",
        "${exec_prefix}/lib/${application_name}/${version}/${architecture}",
        "${exec_prefix}/lib/${application_name}/${version}/${machine}",
        "${exec_prefix}/lib/${application_name}/${architecture}",
        "${exec_prefix}/lib/${application_name}/${machine}",
        "${exec_prefix}/lib/${architecture}/${company_name}/${application_name}/${version}",
        "${exec_prefix}/lib/${machine}/${company_name}/${application_name}/${version}",
        "${exec_prefix}/lib/${architecture}/${application_name}/${version}",
        "${exec_prefix}/lib/${machine}/${application_name}/${version}",
        "${exec_prefix}/lib/${architecture}/${company_name}/${application_name}",
        "${exec_prefix}/lib/${machine}/${company_name}/${application_name}",
        "${exec_prefix}/lib/${architecture}/${application_name}",
        "${exec_prefix}/lib/${machine}/${application_name}",
        "${exec_prefix}/lib/${architecture}",
        "${exec_prefix}/lib/${machine}",
        "${exec_prefix}/lib/${company_name}/${application_name}/${version}",
        "${exec_prefix}/lib/${company_name}/${application_name}",
        "${exec_prefix}/lib/${application_name}/${version}",
        "${exec_prefix}/lib/${application_name}",
        "${exec_prefix}/lib"
    )};
    static constexpr yekneb::ConstantString defaultValue{"${prefix}/lib"};
};

struct localedirCandidates
{
    static constexpr auto values{MakeConstantStringTuple(
        "${datarootdir}/locale/${company_name}/${application_name}/${version}/${language_abbrev_name}",
        "${datarootdir}/locale/${company_name}/${application_name}/${version}/${language_code}",
        "${datarootdir}/locale/${company_name}/${application_name}/${version}/${language_long_name}",
        "${datarootdir}/locale/${company_name}/${application_name}/${version}/${locale}",
        "${datarootdir}/locale/${application_name}/${version}/${language_abbrev_name}",
        "${datarootdir}/locale/${application_name}/${version}/${language_code}",
        "${datarootdir}/locale/${application_name}/${version}/${language_long_name}",
        "${datarootdir}/locale/${application_name}/${version}/${locale}",
        "${datarootdir}/locale/${company_name}/${application_name}/${language_abbrev_name}",
        "${datarootdir}/locale/${company_name}/${application_name}/${language_code}",
        "${datarootdir}/locale/${company_name}/${application_name}/${language_long_name}",
        "${datarootdir}/locale/${company_name}/${application_name}/${locale}",
        "${datarootdir}/locale/${application_name}/${language_abbrev_name}",
        "${datarootdir}/locale/${application_name}/${language_code}",
        "${datarootdir}/locale/${application_name}/${language_long_name}",
        "${datarootdir}/locale/${application_name}/${locale}",
        "${datarootdir}/locale/${language_abbrev_name}",
        "${datarootdir}/locale/${language_code}",
        "${datarootdir}/locale/${language_long_name}",
        "${datarootdir}/locale/${locale}",
        "${datarootdir}/locale/${company_name}/${application_name}/${version}",
        "${datarootdir}/locale/${application_name}/${version}",
        "${datarootdir}/locale/${company_name}/${application_name}",
        "${datarootdir}/locale/${application_name}",
        "${AppDataFolder}/${company_name}/${application_name}/${version}/locale/${language_abbrev_name}",
        "${AppDataFolder}/${company_name}/${application_name}/${version}/locale/${language_code}",
        "${AppDataFolder}/${company_name}/${application_name}/${version}/locale/${language_long_name}",
        "${AppDataFolder}/${company_name}/${application_name}/${version}/locale/${locale}",
        "${AppDataFolder}/${company_name}/${application_name}/${version}/locale",
        "${AppDataFolder}/${application_name}/${version}/locale/${language_abbrev_name}",
        "${AppDataFolder}/${application_name}/${version}/locale/${language_code}",
        "${AppDataFolder}/${application_name}/${version}/locale/${language_long_name}",
        "${AppDataFolder}/${application_name}/${version}/locale/${locale}",
        "${AppDataFolder}/${application_name}/${version}/locale",
        "${AppDataFolder}/${company_name}/${application_name}/locale/${language_abbrev_name}",
        "${AppDataFolder}/${company_name}/${application_name}/locale/${language_code}",
        "${AppDataFolder}/${company_name}/${application_name}/locale/${language_long_name}",
        "${AppDataFolder}/${company_name}/${application_name}/locale/${locale}",
        "${AppDataFolder}/${company_name}/${application_name}/locale",
        "${AppDataFolder}/${application_name}/locale/${language_abbrev_name}",
        "${AppDataFolder}/${application_name}/locale/${language_code}",
        "${AppDataFolder}/${application_name}/locale/${language_long_name}",
        "${AppDataFolder}/${application_name}/locale/${locale}",
        "${AppDataFolder}/${application_name}/locale"
    )};
    static constexpr yekneb::ConstantString defaultValue{"${datarootdir}/locale"};
};

struct mandirCandidates
{
    static constexpr auto values{MakeConstantStringTuple(
        "${datarootdir}/man/${company_name}/${application_name}/${version}",
        "${datarootdir}/man/${application_name}/${version}",
        "${datarootdir}/man/${company_name}/${application_name}",
        "${datarootdir}/man/${application_name}",
        "${AppDataFolder}/${company_name}/${application_name}/${version}/man",
        "${AppDataFolder}/${application_name}/${version}/man",
        "${AppDataFolder}/${company_name}/${application_name}/man",
        "${AppDataFolder}/${application_name}/man",
        "${LocalAppDataFolder}/${company_name}/${application_name}/${version}/man",
        "${LocalAppDataFolder}/${application_name}/${version}/man",
        "${LocalAppDataFolder}/${company_name}/${application_name}/man",
        "${LocalAppDataFolder}/${application_name}/man"
    )};
    static constexpr yekneb::ConstantString defaultValue{"${datarootdir}/man"};
};

struct man1dirCandidates
{
    static constexpr yekneb::ConstantString defaultValue{"${mandir}/man1"};
};

struct man2dirCandidates
{
    static constexpr yekneb::ConstantString defaultValue{"${mandir}/man2"};
};

struct man3dirCandidates
{
    static constexpr yekneb::ConstantString defaultValue{"${mandir}/man3"};
};

struct man4dirCandidates
{
    static constexpr yekneb::ConstantString defaultValue{"${mandir}/man4"};
};

struct man5dirCandidates
{
    static constexpr yekneb::ConstantString defaultValue{"${mandir}/man5"};
};

struct man6dirCandidates
{
    static constexpr yekneb::ConstantString defaultValue{"${mandir}/man6"};
};

struct man7dirCandidates
{
    static constexpr yekneb::ConstantString defaultValue{"${mandir}/man7"};
};

struct man8dirCandidates
{
    static constexpr yekneb::ConstantString defaultValue{"${mandir}/man8"};
};

struct logdirCandidates
{
    static constexpr auto values{MakeConstantStringTuple(
        "${HOME}/log/${company_name}/${application_name}/${version}",
        "${HOME}/log/${application_name}/${version}",
        "${HOME}/log/${company_name}/${application_name}",
        "${HOME}/log/${application_name}",
        "${prefix}/var/log/${company_name}/${application_name}/${version}",
        "${prefix}/var/log/${application_name}/${version}",
        "${prefix}/var/log/${company_name}/${application_name}",
        "${prefix}/var/log/${application_name}",
        "/var/log/${company_name}/${application_name}/${version}",
        "/var/log/${application_name}/${version}",
        "/var/log/${company_name}/${application_name}",
        "/var/log/${application_name}",
        "${AppDataFolder}/${company_name}/${application_name}/${version}/log",
        "${AppDataFolder}/${application_name}/${version}/log",
        "${AppDataFolder}/${company_name}/${application_name}/log",
        "${AppDataFolder}/${application_name}/log",
        "${LocalAppDataFolder}/${company_name}/${application_name}/${version}/log",
        "${LocalAppDataFolder}/${application_name}/${version}/log",
        "${LocalAppDataFolder}/${company_name}/${application_name}/log",
        "${LocalAppDataFolder}/${application_name}/log"
    )};
    static constexpr yekneb::ConstantString defaultValue{"/var/log"};
};

struct sharedsettingsdirCandidates
{
    static constexpr auto values{MakeConstantStringTuple(
        "${prefix}/etc/${company_name}/${application_name}/${version}/settings",
        "${prefix}/etc/${company_name}/${application_name}/${version}",
        "${prefix}/etc/${application_name}/${version}/settings",
        "${prefix}/etc/${application_name}/${version}",
        "${prefix}/etc/${company_name}/${application_name}/settings",
        "${prefix}/etc/${company_name}/${application_name}",
        "${prefix}/etc/${application_name}/settings",
        "${prefix}/etc/${application_name}",
        "${CommonAppDataFolder}/${company_name}/${application_name}/${version}/etc",
        "${CommonAppDataFolder}/${company_name}/${application_name}/${version}/settings",
        "${CommonAppDataFolder}/${company_name}/${application_name}/${version}",
        "${CommonAppDataFolder}/${application_name}/${version}/etc",
        "${CommonAppDataFolder}/${application_name}/${version}/settings",
        "${CommonAppDataFolder}/${application_name}/${version}",
        "${CommonAppDataFolder}/${company_name}/${application_name}/etc",
        "${CommonAppDataFolder}/${company_name}/${application_name}/settings",
        "${CommonAppDataFolder}/${company_name}/${application_name}",
        "${CommonAppDataFolder}/${application_name}/etc",
        "${CommonAppDataFolder}/${application_name}/settings",
        "${CommonAppDataFolder}/${application_name}"
    )};
    static constexpr yekneb::ConstantString defaultValue{"${prefix}/etc"};
};

struct usersettingsdirCandidates
{
    static constexpr auto values{MakeConstantStringTuple(
        "${HOME}/${company_name}/${application_name}/${version}/settings",
        "${HOME}/${company_name}/${application_name}/${version}",
        "${HOME}/${application_name}/${version}/settings",
        "${HOME}/${application_name}/${version}",
        "${HOME}/${company_name}/${application_name}/settings",
        "${HOME}/${company_name}/${application_name}",
        "${HOME}/${application_name}/settings",
        "${HOME}/${application_name}",
        "${AppDataFolder}/${company_name}/${application_name}/${version}/settings",
        "${AppDataFolder}/${company_name}/${application_name}/${version}",
        "${AppDataFolder}/${application_name}/${version}/settings",
        "${AppDataFolder}/${application_name}/${version}",
        "${AppDataFolder}/${company_name}/${application_name}/settings",
        "${AppDataFolder}/${company_name}/${application_name}",
        "${AppDataFolder}/${application_name}/settings",
        "${AppDataFolder}/${application_name}",
        "${LocalAppDataFolder}/${company_name}/${application_name}/${version}/settings",
        "${LocalAppDataFolder}/${company_name}/${application_name}/${version}",
        "${LocalAppDataFolder}/${application_name}/${version}/settings",
        "${LocalAppDataFolder}/${application_name}/${version}",
        "${LocalAppDataFolder}/${company_name}/${application_name}/settings",
        "${LocalAppDataFolder}/${company_name}/${application_name}",
        "${LocalAppDataFolder}/${application_name}/settings",
        "${LocalAppDataFolder}/${application_name}"
    )};
    static constexpr yekneb::ConstantString defaultValue{"${HOME}"};
};

struct sharedsettingslangdirCandidates
{
    static constexpr auto values{MakeConstantStringTuple(
        "${sharedsettingsdir}/${language_abbrev_name}",
        "${sharedsettingsdir}/${language_code}",
        "${sharedsettingsdir}/${language_long_name}",
        "${sharedsettingsdir}/${locale}"
    )};
    static constexpr yekneb::ConstantString defaultValue{"${sharedsettingsdir}/${language_code}"};
};

struct usersettingslangdirCandidates
{
    static constexpr auto values{MakeConstantStringTuple(
        "${usersettingsdir}/${language_abbrev_name}",
        "${usersettingsdir}/${language_code}",
        "${usersettingsdir}/${language_long_name}",
        "${usersettingsdir}/${locale}"
    )};
    static constexpr yekneb::ConstantString defaultValue{"${usersettingsdir}/${language_code}"};
};

} // namespace yekneb::detail::FileLocator

#endif // }
