"use client";

import type { Project } from "../types";
import { SIZE_LABELS } from "../types";

const SIZE_STYLES: Record<Project["size"], string> = {
  Big: "border-white/25 bg-white/10 text-white",
  MediumSized: "border-white/15 bg-white/[0.06] text-gray-200",
  Small: "border-white/10 bg-white/[0.03] text-gray-400",
};

export function ProjectCard({ project }: { project: Project }) {
  const loc = project.resolvedLoc ?? project.loc ?? null;

  return (
    <div className="group flex w-full flex-col rounded-2xl border border-white/10 bg-white/[0.03] p-4 transition-all duration-300 hover:-translate-y-1 hover:border-white/25 sm:p-6">
      {project.imageUrl ? (
        // Image shown in full — no overlays over it.
        <div className="mb-4 flex items-center justify-center overflow-hidden rounded-xl bg-black/30 p-3">
          <img
            src={project.imageUrl}
            alt={project.name}
            className="max-h-40 w-auto max-w-full object-contain"
          />
        </div>
      ) : null}

      <div className="mb-2 flex flex-wrap items-center gap-2">
        <h3 className="text-lg font-semibold text-white sm:text-xl">{project.name}</h3>
        <span className={`rounded-full border px-2 py-0.5 text-[10px] font-semibold uppercase tracking-wide ${SIZE_STYLES[project.size]}`}>
          {SIZE_LABELS[project.size]}
        </span>
        {project.label ? (
          <span className="rounded-full border border-white/10 bg-white/5 px-2 py-0.5 text-[10px] font-medium text-gray-300">
            {project.label}
          </span>
        ) : null}
      </div>

      <p className="mb-3 text-sm leading-relaxed text-gray-400">{project.description}</p>

      {project.why ? (
        <p className="mb-3 text-sm leading-relaxed text-gray-500">
          <span className="font-semibold text-gray-400">Why:</span> {project.why}
        </p>
      ) : null}

      {project.note ? (
        <div className="mb-3 rounded-lg border-l-2 border-white/25 bg-white/[0.04] px-3 py-2 text-xs text-gray-300">
          {project.note}
        </div>
      ) : null}

      {project.tags.length > 0 ? (
        <div className="mb-4 flex flex-wrap gap-2">
          {project.tags.map((tag) => (
            <span
              key={`${project.id}-${tag}`}
              className="rounded-full border border-white/10 bg-black/20 px-2.5 py-1 text-xs font-medium text-gray-300"
            >
              {tag}
            </span>
          ))}
        </div>
      ) : null}

      {loc !== null ? (
        <p className="mb-4 font-mono text-xs bg-gradient-to-r from-indigo-400 via-pink-500 to-yellow-500 bg-clip-text text-transparent">
          {loc.toLocaleString()} lines of code
        </p>
      ) : null}

      <div className="mt-auto flex flex-col gap-3 sm:flex-row">
        <a
          href={project.link}
          target="_blank"
          rel="noreferrer"
          className="flex flex-1 items-center justify-center gap-2 rounded-lg bg-white/10 px-4 py-2 text-center text-sm font-medium text-white transition-colors hover:bg-white/20"
        >
          {project.linkIsDemo ? "Live Demo" : "Visit"}
          <svg className="h-3 w-3" fill="none" stroke="currentColor" viewBox="0 0 24 24">
            <path strokeLinecap="round" strokeLinejoin="round" strokeWidth="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14" />
          </svg>
        </a>
        {project.sourceCode ? (
          <a
            href={project.sourceCode}
            target="_blank"
            rel="noreferrer"
            className="flex items-center justify-center rounded-lg border border-white/5 bg-white/5 p-2 text-gray-400 transition-colors hover:bg-white/10 hover:text-white"
            title="View Source"
          >
            <svg className="h-5 w-5" fill="currentColor" viewBox="0 0 24 24">
              <path d="M12 0c-6.626 0-12 5.373-12 12 0 5.302 3.438 9.8 8.207 11.387.599.111.793-.261.793-.577v-2.234c-3.338.726-4.033-1.416-4.033-1.416-.546-1.387-1.333-1.756-1.333-1.756-1.089-.745.083-.729.083-.729 1.205.084 1.839 1.237 1.839 1.237 1.07 1.834 2.807 1.304 3.492.997.107-.775.418-1.305.762-1.604-2.665-.305-5.467-1.334-5.467-5.931 0-1.311.469-2.381 1.236-3.221-.124-.303-.535-1.524.117-3.176 0 0 1.008-.322 3.301 1.23.957-.266 1.983-.399 3.003-.404 1.02.005 2.047.138 3.006.404 2.291-1.552 3.297-1.23 3.297-1.23.653 1.653.242 2.874.118 3.176.77.84 1.235 1.911 1.235 3.221 0 4.609-2.807 5.624-5.479 5.921.43.372.823 1.102.823 2.222v3.293c0 .319.192.694.801.576 4.765-1.589 8.199-6.086 8.199-11.386 0-6.627-5.373-12-12-12z" />
            </svg>
          </a>
        ) : null}
      </div>
    </div>
  );
}
