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

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

export type DiscoverContestCardDescriptionProps = {
  contestDescription?: string;
  contestClip?: ClipEntity;
  startTime?: string;
  endTime?: string;
  winnersAnnouncedDate?: string;
  winnersPlaylistId?: string;
  className?: string;
};

const DiscoverContestCardDescription: React.FC<
  DiscoverContestCardDescriptionProps
> = ({
  contestDescription,
  contestClip,
  endTime,
  winnersAnnouncedDate,
  winnersPlaylistId,
  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);

  // Format date as M/D
  const formatDate = (dateString: string) => {
    const date = new Date(dateString);
    return `${date.getMonth() + 1}/${date.getDate()}`;
  };

  // Generate dynamic description
  const getContestDescription = () => {
    // If no contest clip, use original contest description
    if (!contestClip) {
      return contestDescription;
    }

    const clipTitle = contestClip?.title || '';

    // 1. If active, keep original
    if (!isContestEnded) {
      return contestDescription;
    }

    // 2. If still not announced but over OR winners date passed but no playlist
    if (
      isContestEnded &&
      (!isWinnersAnnouncedDatePassed || !hasWinnersPlaylist)
    ) {
      if (winnersAnnouncedDate && !isWinnersAnnouncedDatePassed) {
        return `Listen to some of the fresh takes on ${clipTitle} before we announce the winners on ${formatDate(winnersAnnouncedDate)}`;
      } else {
        return `Listen to some of the fresh takes on ${clipTitle} before we announce the winners soon`;
      }
    }

    // 3. If done (winners date passed AND we have winners playlist)
    if (isWinnersAnnouncedDatePassed && hasWinnersPlaylist) {
      return 'Our last contest produced some serious bangers! Take them for a spin now.';
    }

    return contestDescription; // Fallback
  };

  const description = getContestDescription();

  // Don't render if no description
  if (!description) {
    return null;
  }

  return (
    <p
      className={twMerge(
        'mt-1 line-clamp-2 text-[12px] leading-4 font-normal tracking-[0.24px] text-foreground-secondary not-italic',
        className
      )}
    >
      {description}
    </p>
  );
};

export default DiscoverContestCardDescription;
