import React, {useEffect, useMemo} from 'react';
import {Navigation} from '@interfaces/navigation';
import {
  useGetPerformanceCycle,
  useGetReviewStatus,
} from '@modules/performance/hooks';
import {PerformanceReviewSharedStatus} from '@modules/performance/interfaces';
import {ReviewResults} from '@modules/performance/components';
import {getReviewOptions} from '@modules/performance/utils';
import {useAppSelector} from '@redux/utils';
import {Screens} from '@shared/constants';

// TODO: Remove this screen after the migration
function MyResultsScreen({
  navigation,
  route: {
    params: {cycleId, screenTitle},
  },
}: Navigation<Screens.PERFORMANCE_REVIEW_MY_RESULTS>) {
  const userId = useAppSelector(({user}) => user.id);
  const {cycle, isLoading, reviewShared} = useGetPerformanceCycle(cycleId);
  const {summary, isLoading: isLoadingReviewStatus} = useGetReviewStatus({
    cycleId,
    userId: cycle?.userTargetUser?.id,
  });
  const {reviews, confirmReview} = useMemo(
    () => ({
      reviews: getReviewOptions(cycle?.reviewedFormReviews || [], {
        isUpwardReviewAnonymous: cycle?.upwardReviewAnonymousAnswers,
      }),
      confirmReview: cycle?.reviewedFormReviews.find(
        item =>
          item.reviewed.userId === userId &&
          item.shareStatus === PerformanceReviewSharedStatus.SHARED_UNCONFIRMED,
      ),
    }),
    [cycle, userId],
  );
  const summaryReview = useMemo(
    () =>
      typeof summary?.score === 'number' || summary?.text
        ? {
            text: summary.text,
            score: summary.score,
          }
        : null,
    [summary?.score, summary?.text],
  );

  useEffect(() => {
    if (screenTitle) {
      navigation.setOptions({title: screenTitle});
    }
    // eslint-disable-next-line react-hooks/exhaustive-deps
  }, [screenTitle]);

  return (
    <ReviewResults
      cycleId={cycleId}
      reviews={reviews}
      summary={summaryReview}
      confirmReview={confirmReview}
      isLoading={isLoading || isLoadingReviewStatus}
      isReviewed
      isVisible={reviewShared}
    />
  );
}

export default MyResultsScreen;
