import { GetServerSideProps } from "next";
import { MainLayout } from "../../layouts/MainLayout";
import { Post, getAllProjectsFrontMatter } from "../../utils/markdown";
import Link from "next/link";
import { formatDate } from "../../utils/general";
import { BasicArticleProps } from "../../components/PostHeader";

const ProjectCard = ({
  project,
  slug,
}: {
  project: BasicArticleProps;
  slug: string;
}) => {
  return (
    <div className="p-4 rounded-md border border-gray-200 shadow-md shadow-gray-200 dark:shadow-gray-900 dark:border-gray-700 grid grid-cols-1 xl:grid-cols-2 items-center gap-4 bg-black bg-opacity-60">
      <div className="order-last xl:order-1">
        <div className="text-sm font-medium text-gray-500">
          {formatDate(project.date)}
        </div>
        <h2 className="text-2xl font-bold">{project.title}</h2>
        <p className="text-gray-600 dark:text-gray-400 text-sm">
          {project.description}
        </p>
        <Link href={`project/${slug}`}>
          <button className="bg-action px-2 py-1 rounded-md mt-4 hover:bg-action/60 transition-all ease-in duration-100 font-bold text-white">
            Read more
          </button>
        </Link>
      </div>
      {project.thumbnail && (
        <img
          src={project.thumbnail}
          alt={`${slug}-thumbnail`}
          className="w-full xl:h-40 h-auto object-cover rounded-md order-1 xl:order-last"
        />
      )}
    </div>
  );
};

const Projects = ({ posts }: { posts: Post[] }) => {
  return (
    <MainLayout>
      <h1 className="text-3xl font-bold text-gray-800 dark:text-gray-100">
        Projects
      </h1>
      <div className="w-full h-0.5 bg-violet-200 dark:bg-violet-700 my-4 rounded-full" />
      <div className="grid grid-cols-1 gap-4">
        {posts.map((post, index) => (
          <ProjectCard
            key={index}
            project={post.frontMatter as BasicArticleProps}
            slug={post.slug}
          />
        ))}
      </div>
    </MainLayout>
  );
};

export const getServerSideProps: GetServerSideProps = async () => {
  const posts = getAllProjectsFrontMatter();
  return {
    props: {
      posts,
    },
  };
};

export default Projects;
