import type { UserProgressResponse } from './FavoriteRoadmaps';
import { CheckIcon } from '../ReactIcons/CheckIcon';
import { MarkFavorite } from '../FeaturedItems/MarkFavorite';
import { Spinner } from '../ReactIcons/Spinner';

type ProgressListProps = {
  progress: UserProgressResponse;
  isLoading?: boolean;
};

export function ProgressList(props: ProgressListProps) {
  const { progress, isLoading = false } = props;

  return (
    <div className="relative pb-12 pt-4 sm:pt-7">
      <p className="mb-4 flex items-center text-sm text-gray-400">
        {!isLoading && (
          <CheckIcon additionalClasses={'mr-1.5 w-[14px] h-[14px]'} />
        )}
        {isLoading && (
          <span className="mr-1.5">
            <Spinner />
          </span>
        )}
        Your progress and favorite roadmaps.
      </p>

      <div className="grid grid-cols-1 gap-2 sm:grid-cols-2 md:grid-cols-3">
        {progress.map((resource) => {
          const url =
            resource.resourceType === 'roadmap'
              ? `/${resource.resourceId}`
              : `/best-practices/${resource.resourceId}`;

          const percentageDone =
            ((resource.skipped + resource.done) / resource.total) * 100;

          return (
            <a
              key={resource.resourceId}
              href={url}
              className="relative flex flex-col overflow-hidden rounded-md border border-slate-800 bg-slate-900 p-3 text-sm text-slate-400 hover:border-slate-600 hover:text-slate-300"
            >
              <span className="relative z-20">{resource.resourceTitle}</span>

              <span
                className="absolute bottom-0 left-0 top-0 z-10 bg-[#172a3a]"
                style={{ width: `${percentageDone}%` }}
              ></span>
              <MarkFavorite
                resourceId={resource.resourceId}
                resourceType={resource.resourceType}
                favorite={resource.isFavorite}
              />
            </a>
          );
        })}
      </div>
    </div>
  );
}
