import { useRoute } from '@react-navigation/native';
import cn from 'classnames';
import React from 'react';
import { View, ScrollView, Image, Text } from 'react-native';

import DetailList from '../../../../../../../../../../components/List/DetailList';
import Title from '../../../../../../../../../../components/List/components/Title';
import Loader from '../../../../../../../../../../components/Loader/Loader';
import { RouteProps } from '../../../../../../../../../../components/Routes/Routes';
import { getDateAsString } from '../../../../../../../../../../helpers/stringHelpers';
import { useCandidate } from '../../../../../../../../../../hooks/useCongress';
import { useUserInfo } from '../../../../../../../../../../hooks/useStorage';
import { sendEmail } from '../../../../../../../../../../services/nativeHelpers/sendEmail';

const CongressCandidateDetail = () => {
  const { id, photo } = useRoute<RouteProps<'CongressCandidateDetail'>>().params;
  const [userInfo] = useUserInfo();

  const { candidate, isLoading } = useCandidate(userInfo.token, id);

  return (
    <View className="mx-4 mb-4 flex-1 justify-start bg-primary-bg">
      {!isLoading ? (
        <ScrollView>
          <View className={cn({ 'mb-4': photo?.length }, 'flex-row items-center justify-center')}>
            {!!photo?.length && (
              <Image
                className="h-[65px] w-[50px] rounded"
                source={{ uri: `data:image/png;base64,${photo}` }}
              />
            )}
          </View>

          <DetailList
            items={[
              {
                title: 'Sněm:',
                value: candidate.congress || ' ',
              },
              {
                title: 'Funkce, na kterou kandiduje:',
                value: candidate.function || ' ',
              },
              {
                title: 'Kandidaturu zapsal:',
                value: candidate.personCreate || ' ',
              },
              {
                title: 'Datum zapsání:',
                value: candidate.dateCreate ? getDateAsString(new Date(candidate.dateCreate)) : ' ',
              },
              {
                title: 'Kandidát:',
                value: candidate.displayName || ' ',
              },
              {
                title: 'S kým kandiduje:',
                value: candidate.personWith || ' ',
              },
              {
                title: 'Dosavadní povolání:',
                value: candidate.career || ' ',
              },
              {
                title: 'Prezentace kandidáta:',
                value: candidate.presentation || ' ',
              },
            ]}
          />

          <DetailList
            title={{
              text: 'Navrhovatel',
            }}
            items={[
              {
                title: 'Jméno:',
                value: candidate.suggesterName || ' ',
              },
              {
                title: 'Název orgánu:',
                value: candidate.suggesterFunction || ' ',
              },
              {
                title: 'Vyjádření navrhovatele:',
                value: candidate.suggesterDescription || ' ',
              },
            ]}
          />

          <DetailList
            title={{
              text: 'Informace o kandidátovi',
            }}
            items={[
              {
                title: 'Titul před jménem:',
                value: candidate.person?.degreeInFront || ' ',
              },
              {
                title: 'Titul za jménem:',
                value: candidate.person?.degreeBehind || ' ',
              },
              {
                title: 'Jméno:',
                value: candidate.person?.firstName || ' ',
              },
              {
                title: 'Příjmení:',
                value: candidate.person?.lastName || ' ',
              },
              {
                title: 'Přezdívka:',
                value: candidate.person?.nickName || ' ',
              },
              {
                title: 'Rok narození:',
                value: candidate.person?.birthday
                  ? new Date(candidate.person?.birthday).getFullYear().toString()
                  : ' ',
              },
              {
                title: 'Obec trvalého bydliště:',
                value: candidate.person?.city || ' ',
              },
              {
                title: 'Členem Junáka od:',
                value: candidate.person?.yearFrom || ' ',
              },
              {
                title: 'Registrován ve středisku:',
                value: candidate.person?.unit || ' ',
              },
            ]}
          />

          <Title classNames="mt-4" text="Kontaktní údaje" center />
          {candidate?.contacts?.length ? (
            <>
              {candidate?.contacts?.map((item, index) => (
                <DetailList
                  key={index}
                  items={[
                    {
                      title: item.contactType,
                      value: item.value,
                      classNames: item?.value.includes('@') ? 'text-secondary' : '',
                      onPress: item?.value.includes('@') ? () => sendEmail(item?.value) : undefined,
                    },
                    ...(item.note
                      ? [
                          {
                            title: 'Poznámka:',
                            value: item.note,
                          },
                        ]
                      : []),
                  ]}
                />
              ))}
            </>
          ) : (
            <Text className="mt-4 rounded bg-secondary-bg p-4">
              Kandidát nezadal žádné kontaktní údaje.
            </Text>
          )}

          <Title classNames="mt-4" text="Absolvence vzdělávacích akcí" center />
          {candidate?.seminaries?.length ? (
            <>
              {candidate?.seminaries?.map((item, index) => (
                <DetailList
                  key={index}
                  items={[
                    {
                      title: 'Název akce:',
                      value: item.seminary,
                    },
                    {
                      title: 'Rok získání:',
                      value: item.yearFrom,
                    },
                  ]}
                />
              ))}
            </>
          ) : (
            <Text className="mt-4 rounded bg-secondary-bg p-4">
              Kandidát neabsoloval žádné vzdělávací akce.
            </Text>
          )}

          <Title classNames="mt-4" text="Dosavadní činovnické funkce" center />
          {candidate?.functions?.length ? (
            <>
              {candidate?.functions?.map((item, index) => (
                <DetailList
                  key={index}
                  items={[
                    {
                      title: 'Název:',
                      value: item.type,
                    },
                    {
                      title: 'Jednotka:',
                      value: item.unit,
                    },
                    {
                      title: `Od roku ${new Date(item.validFrom).getFullYear()}`,
                      value: `Do ${
                        item.validTo
                          ? `roku ${new Date(item.validTo).getFullYear()}`
                          : 'současnosti'
                      }`,
                    },
                  ]}
                />
              ))}
            </>
          ) : (
            <Text className="mt-4 rounded bg-secondary-bg p-4">
              Kandidát nezastupoval žádnou činovnickou funkci.
            </Text>
          )}

          <Title classNames="mt-4" text="Skautské kvalifikace" center />
          {candidate?.qualifications?.length ? (
            <>
              {candidate?.qualifications?.map((item, index) => (
                <DetailList
                  key={index}
                  items={[
                    {
                      title: 'Název:',
                      value: item.type,
                    },
                    {
                      title: 'Rok získání:',
                      value: item.validFrom
                        ? new Date(item.validFrom).getFullYear().toString()
                        : ' ',
                    },
                    ...(item.note
                      ? [
                          {
                            title: 'Poznámka:',
                            value: item.note,
                          },
                        ]
                      : []),
                  ]}
                />
              ))}
            </>
          ) : (
            <Text className="mt-4 rounded bg-secondary-bg p-4">
              Kandidát nemá žádné skautské kvalifikace.
            </Text>
          )}

          <Title classNames="mt-4" text="Doporučení" center />
          {candidate?.recommendations?.length ? (
            <>
              {candidate?.recommendations?.map((item, index) => (
                <DetailList
                  key={index}
                  items={[
                    {
                      title: item.displayName,
                      value: item.relation,
                    },
                    ...(item.description
                      ? [
                          {
                            title: 'Popis:',
                            value: item.description,
                          },
                        ]
                      : []),
                  ]}
                />
              ))}
            </>
          ) : (
            <Text className="mt-4 rounded bg-secondary-bg p-4">
              Kandidát nemá žádné doporučení.
            </Text>
          )}
        </ScrollView>
      ) : (
        <Loader />
      )}
    </View>
  );
};

export default CongressCandidateDetail;
