import { CreatorData } from '@/types/Creator';

import type { AppLocale } from '@/config/i18n';

export type CreatorSubPageId =
  | 'alkotas-valogatas'
  | 'alkotasok'
  | 'eletut-esemenyek'
  | 'mma-hirek'
  | 'alkotas-videok'
  | 'lexikon'
  | 'palyakep'
  | 'dijak'
  | 'rola'
  | 'terkep'
  | 'motto';

export type CreatorSubpagePathname =
  | '/alkoto/[id]/alkotas-valogatas'
  | '/alkoto/[id]/alkotasok'
  | '/alkoto/[id]/eletut-esemenyek'
  | '/alkoto/[id]/mma-hirek'
  | '/alkoto/[id]/alkotas-videok'
  | '/alkoto/[id]/lexikon'
  | '/alkoto/[id]/palyakep'
  | '/alkoto/[id]/rola'
  | '/alkoto/[id]/dijak'
  | '/alkoto/[id]/terkep'
  | '/alkoto/[id]/motto';

export type CreatorSubpagePathnameEn =
  | '/creator/[id]/creation-selection'
  | '/creator/[id]/creations'
  | '/creator/[id]/timeline-events'
  | '/creator/[id]/mma-news'
  | '/creator/[id]/creation-videos'
  | '/creator/[id]/lexicon'
  | '/creator/[id]/career'
  | '/creator/[id]/about'
  | '/creator/[id]/awards'
  | '/creator/[id]/map'
  | '/creator/[id]/motto';

export type CreatorPageConfigItem = {
  id: CreatorSubPageId;
  route: CreatorSubpagePathname;
  routeEn: CreatorSubpagePathnameEn;
  color: 'blue' | 'yellow' | 'cyan' | 'gray';
  background?: string;
  quote?: string;
  className?: string;
  visibleLocales?: AppLocale[];
  hasContent?: boolean | ((creator: CreatorData) => boolean);
};

export const resolveHasContent = (item: CreatorPageConfigItem, creator: CreatorData): boolean => {
  if (typeof item.hasContent === 'function') {
    return item.hasContent(creator);
  }

  // visible if not defined
  return item.hasContent ?? true;
};

export const CREATOR_PAGES_CONFIG: Record<string, CreatorPageConfigItem> = {
  featuredCreations: {
    id: 'alkotas-valogatas',
    route: '/alkoto/[id]/alkotas-valogatas',
    routeEn: '/creator/[id]/creation-selection',
    color: 'blue',
    // hasContent: (creator: CreatorData) => creator.,
    hasContent: true,
  },
  creations: {
    id: 'alkotasok',
    route: '/alkoto/[id]/alkotasok',
    routeEn: '/creator/[id]/creations',
    color: 'blue',
    hasContent: (creator: CreatorData) => creator.hasCreations,
    // visibleLocales: ["hu"],
  },
  lifeEvents: {
    id: 'eletut-esemenyek',
    route: '/alkoto/[id]/eletut-esemenyek',
    routeEn: '/creator/[id]/timeline-events',
    color: 'yellow',
    hasContent: true, // we will always have at least birth data
    visibleLocales: ['hu'],
  },
  mmaNews: {
    id: 'mma-hirek',
    route: '/alkoto/[id]/mma-hirek',
    routeEn: '/creator/[id]/mma-news',
    color: 'cyan',
    hasContent: (creator: CreatorData) => creator.hasMmaNews,
    visibleLocales: ['hu'],
  },
  creationVideos: {
    id: 'alkotas-videok',
    route: '/alkoto/[id]/alkotas-videok',
    routeEn: '/creator/[id]/creation-videos',
    color: 'cyan',
    hasContent: (creator: CreatorData) => creator.hasCreationVideos,
    visibleLocales: ['hu'],
  },
  lexicon: {
    id: 'lexikon',
    route: '/alkoto/[id]/lexikon',
    routeEn: '/creator/[id]/lexicon',
    color: 'blue',
    hasContent: (creator: CreatorData) => Boolean(creator.eletrajz?.trim()),
  },
  career: {
    id: 'palyakep',
    route: '/alkoto/[id]/palyakep',
    routeEn: '/creator/[id]/career',
    color: 'blue',
    hasContent: (creator: CreatorData) => Boolean(creator.palyakep?.trim()),
  },
  about: {
    id: 'rola',
    route: '/alkoto/[id]/rola',
    routeEn: '/creator/[id]/about',
    color: 'yellow',
    hasContent: (creator: CreatorData) => Boolean(creator.toleRola?.trim()),
  },
  awards: {
    id: 'dijak',
    route: '/alkoto/[id]/dijak',
    routeEn: '/creator/[id]/awards',
    color: 'cyan',
    hasContent: (creator: CreatorData) => Boolean(creator.dijak?.trim()),
  },
  map: {
    id: 'terkep',
    route: '/alkoto/[id]/terkep',
    routeEn: '/creator/[id]/map',
    color: 'blue',
    hasContent: (creator: CreatorData) => creator.hasCreationMapData,
    background: '/assets/images/etc/maps.png',
  },
  motto: {
    id: 'motto',
    route: '/alkoto/[id]/motto',
    routeEn: '/creator/[id]/motto',
    color: 'yellow',
    hasContent: (creator: CreatorData) => Boolean(creator.arsPoetica?.trim()),
  },
} satisfies Record<string, CreatorPageConfigItem>;

// to switch to multi-func visible incl locale
export const isCreatorPageVisible = (
  item: CreatorPageConfigItem,
  creator: CreatorData,
  locale: AppLocale
) => {
  if (item.visibleLocales && !item.visibleLocales.includes(locale)) {
    return false;
  }

  return resolveHasContent(item, creator);
};
// in component:
// Object.values(CREATOR_PAGES_CONFIG).filter((item) =>
//   isCreatorPageVisible(item, creator, locale)
// );
