import React from 'react';
import { twMerge } from 'tailwind-merge';

import { ClipEntity } from '@/state/clipStore';

export type DiscoverContestCardTitleProps = {
  contestName: string;
  contestClip?: ClipEntity;
  startTime?: string;
  endTime?: string;
  winnersAnnouncedDate?: string;
  winnersPlaylistId?: string;
  isMobile?: boolean;
  className?: string;
};

const DiscoverContestCardTitle: React.FC<DiscoverContestCardTitleProps> = ({
  contestName,
  contestClip,
  endTime,
  winnersAnnouncedDate,
  winnersPlaylistId,
  isMobile = false,
  className,
}) => {
  // Check contest state
  const isContestEnded = endTime ? Date.now() > Date.parse(endTime) : false;
  const isWinnersAnnouncedDatePassed = winnersAnnouncedDate
    ? Date.now() > Date.parse(winnersAnnouncedDate)
    : false;
  const hasWinnersPlaylist = Boolean(winnersPlaylistId);

  // Generate dynamic title
  const getContestTitle = () => {
    // If no contest clip, use original contest name
    if (!contestClip) {
      return contestName;
    }

    const clipTitle = contestClip?.title || '';
    const authorName = contestClip?.displayName || contestClip?.handle || '';

    // 1. If contest is active
    if (!isContestEnded) {
      if (contestName) return contestName;
      return `Remix '${clipTitle}' by ${authorName}`;
    }

    // 2. If contest is done but not announced OR winners date passed but no playlist
    if (
      isContestEnded &&
      (!isWinnersAnnouncedDatePassed || !hasWinnersPlaylist)
    ) {
      return `The ${authorName} contest has concluded`;
    }

    // 3. If done and winners available (winners date passed AND we have winners playlist)
    if (isWinnersAnnouncedDatePassed && hasWinnersPlaylist) {
      return `Listen to the winners of the ${authorName} contest`;
    }

    return contestName; // Fallback
  };

  return (
    <h3
      className={twMerge(
        'line-clamp-1 text-[16px] leading-6 font-semibold tracking-[0.32px] text-foreground-primary not-italic',
        isMobile ? 'line-clamp-2' : 'line-clamp-1',
        className
      )}
    >
      {getContestTitle()}
    </h3>
  );
};

export default DiscoverContestCardTitle;
