---
import { Image } from 'astro:assets'
import type { GlobImage } from '../../types/generic'
import { plsLoadImage } from '../../utils/tools'

export interface Props {
  date: string
  title: string
  link: string
  targetImageFile: string
  user?: string
  servantImageFile?: string
  turns?: string
}

const { turns, targetImageFile, user, date, servantImageFile, link, title } =
  Astro.props

const options_date: Intl.DateTimeFormatOptions = {
  year: 'numeric',
  month: '2-digit',
  day: '2-digit',
}

const targetImagePath = `/src/assets/ta_icons/${targetImageFile}`
const servantImagePath = `/src/assets/ta_icons/ta_servants/${servantImageFile}`

const formatted_date = new Date(date).toLocaleDateString('de-DE', options_date)
const target_images = import.meta.glob<GlobImage>(
  '/src/assets/ta_icons/*.{png,webp}'
)
const servant_images = import.meta.glob<GlobImage>(
  '/src/assets/ta_icons/ta_servants/*.{png,webp}'
)

const loadedServantImage = plsLoadImage(servant_images, servantImagePath)
const loadedTargetImage = plsLoadImage(target_images, targetImagePath)

const hasuser = user !== undefined ? 'display: flex' : 'display: none'
---

<a href={link} target="_blank" rel="noopener noreferrer" aria-label={title}>
  <div class="imagecontainer">
    <Image src={loadedTargetImage} alt={title} />
    <div class="title">
      <h2>{title}</h2>
    </div>
  </div>
  <p>
    <span style={hasuser}>By {user}<br />•</span>
    {formatted_date}
  </p>
  <div class="expand-on-hover">
    <Image src={loadedServantImage} alt="" />
    <h2>{turns}</h2>
  </div>
</a>

<style>
  * {
    transition: all var(--a-time-default) var(--a-animation-1);
  }
  a {
    text-decoration: none;
    display: flex;
    flex-direction: column;
    flex-wrap: wrap;
    background-color: var(--c-primary-background);
    border: 2px var(--c-primary-background) solid;
    padding: 10px;
    text-align: center;
    width: max(30%, 100px);
    height: auto;
    border-radius: 1.25rem;
    justify-content: center;
    align-items: center;
    z-index: 1;
  }

  a:hover {
    transform: scale(1);
    border-color: var(--c-accent-1);
    z-index: 10;
  }

  .imagecontainer {
    display: flex;
    width: 90%;
    height: auto;
    position: relative;
  }
  .imagecontainer > img {
    width: 100%;
    height: auto;
    border-radius: 1.25rem;
  }

  a:hover .title {
    display: flex;
    position: absolute;
    align-items: center;
    justify-content: center;
    text-align: center;
    background-color: var(--c-primary-background);
    width: 100%;
    height: 100%;
    opacity: 90%;
    box-shadow: 0px 0px 0px 1px var(--c-primary-background);
    border-radius: 1.25rem;
  }

  a:hover .title h2 {
    margin: 4px;
    display: inline-flex;
    font-weight: 500;
    color: var(--c-primary-text);
    font-size: 1rem;
    line-height: 150%;
  }

  a .title {
    display: none;
  }

  p {
    display: flex;
    flex-wrap: wrap;
    flex-direction: column;
    text-align: center;
    justify-content: center;
    align-items: center;
    line-height: 100%;
    text-decoration: none;
    color: var(--c-primary-text);
    font-size: 1rem;
    font-weight: 400;
    margin: 0.5rem 0px 0.625rem 0px;
  }

  .expand-on-hover {
    display: flex;
    flex-direction: row;
    flex-wrap: wrap;
    align-items: top;
    justify-content: space-evenly;
    background-color: var(--c-primary-background);
    border: 2px var(--c-primary-background) solid;
    border-top: 0px;
    z-index: 99;
    transform: scaleY(0);
    transform-origin: top;
    position: absolute;
    top: 87.5%;
    padding-top: 0.5rem;
    margin-top: 0.2rem;
    color: var(--c-primary-text);
    border-radius: 0px 0px 1.25rem 1.25rem;
    width: 100%;
  }

  .expand-on-hover img {
    width: 2.5rem;
    height: auto;
    margin-bottom: 0.5rem;
    border-radius: 0.5rem;
  }

  .expand-on-hover h2 {
    margin: 0.5rem;
  }

  a:hover .expand-on-hover {
    transform: scaleY(1);
    transition: all var(--a-time-default) var(--a-animation-1);
    background-color: var(--c-primary-background);
    border-color: var(--c-accent-1);
  }

  @media (min-width: 512px) {
    a {
      padding: 10px;
      width: auto;
      height: auto;
    }

    a > .imagecontainer {
      width: 112px;
      height: 112px;
    }
  }
</style>