import { LitElement, css, html } from 'lit';
import { customElement, property } from 'lit/decorators.js';

import '@components/EveLink';
import formatDateTime from '@/utils/formatDateTime';

@customElement('arx-arbor-forum-topic')
export class ArborForumTopic extends LitElement {
  static override styles = [
    css`
      .topic {
        display: grid;
        grid-template-columns: 3fr 1fr;
        padding: 1.75rem;
        border-radius: var(--radius-box);
        margin-bottom: 1rem;
        border: var(--border) solid var(--color-base-300);
        background-color: var(--color-base-200);
        box-shadow: calc(var(--depth) * 2px) calc(var(--depth) * 2px)
            calc(var(--depth) * 4px)
            oklch(from var(--color-base-content) l c h / 0.1),
          calc(var(--depth) * -1px) calc(var(--depth) * -1px)
            calc(var(--depth) * 3px)
            oklch(from var(--color-base-100) l c h / 0.4);
        transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
      }

      .topic:hover {
        transform: translateY(-2px);
        box-shadow: calc(var(--depth) * 4px) calc(var(--depth) * 4px)
            calc(var(--depth) * 8px)
            oklch(from var(--color-base-content) l c h / 0.15),
          calc(var(--depth) * -2px) calc(var(--depth) * -2px)
            calc(var(--depth) * 5px)
            oklch(from var(--color-base-100) l c h / 0.5);
      }

      .topic-icon {
        inline-size: 40px;
        block-size: 40px;
        background: var(--color-accent);
        border-radius: calc(var(--radius-selector) * 1.5);
        flex-shrink: 0;
        position: relative;
        overflow: hidden;
        box-shadow: calc(var(--depth) * 1px) calc(var(--depth) * 1px)
          calc(var(--depth) * 2px)
          oklch(from var(--color-base-content) l c h / 0.15);
      }

      .topic-icon::after {
        content: "";
        position: absolute;
        inset: 0;
        background: linear-gradient(
          45deg,
          transparent,
          oklch(from var(--color-accent) l c h / 0.2)
        );
      }

      .topic-info {
        display: flex;
        gap: 1.5rem;
        align-items: flex-start;
      }

      .topic-details {
        flex: 1;
      }

      arx-eve-link::part(link) {
        display: inline-block;
        margin-bottom: 0.875rem;
        font-size: 1.2rem;
        font-weight: 600;
        letter-spacing: -0.01em;
        text-decoration: none;
        color: var(--color-base-content);
        transition: all 0.2s ease;
      }

      arx-eve-link:hover::part(link) {
        color: var(--color-accent);
        transform: translateX(4px);
      }

      .topic-details p {
        margin: 0;
        font-size: 0.975rem;
        line-height: 1.6;
        color: var(--color-secondary);
      }

      .new-status {
        position: relative;
        color: var(--color-accent);
      }

      .new-status::after {
        content: "New";
        position: absolute;
        top: -8px;
        right: -40px;
        font-size: 0.75rem;
        font-weight: 700;
        text-transform: uppercase;
        background: var(--color-accent);
        color: var(--color-accent-content);
        padding: 2px 8px;
        border-radius: 12px;
        box-shadow: calc(var(--depth) * 1px) calc(var(--depth) * 1px)
          calc(var(--depth) * 2px)
          oklch(from var(--color-base-content) l c h / 0.15);
      }

      .hot-status {
        color: var(--color-error);
      }

      .hot-status::before {
        content: "🔥";
        margin-right: 0.5rem;
      }

      .stats-container {
        display: flex;
        flex-direction: column;
        gap: 1rem;
        padding-left: 1.5rem;
        border-left: var(--border) solid var(--color-base-300);
      }

      .last-post-section {
        background: oklch(from var(--color-base-200) l c h);
        padding: 0.875rem;
        border-radius: var(--radius-field);
        box-shadow: calc(var(--depth) * 1px) calc(var(--depth) * 1px)
          calc(var(--depth) * 2px)
          oklch(from var(--color-base-content) l c h / 0.1);
      }

      .last-post-section > div:first-of-type {
        font-size: 0.875rem;
        font-weight: 500;
        color: var(--color-secondary);
        margin-bottom: 0.5rem;
      }

      .last-post-info {
        color: var(--color-secondary);
        font-size: 0.875rem;
        margin-top: 0.625rem;
        padding-top: 0.625rem;
        border-top: var(--border) solid var(--color-base-300);
      }

      @media (max-width: 968px) {
        .topic {
          grid-template-columns: 1fr;
          gap: 1.5rem;
          padding: 1.25rem;
        }

        .stats-container {
          padding-left: 0;
          border-left: none;
          padding-top: 1rem;
          border-top: var(--border) solid var(--color-base-300);
        }
      }
    `,
  ];

  @property({ type: String }) override id = '';
  @property({ type: String }) override title = '';
  @property({ type: String }) description = '';
  @property({ type: String }) lastPostBy = '';
  @property({ type: String }) lastPostTime = '';
  @property({ type: Boolean }) isNew = false;
  @property({ type: Boolean }) isHot = false;

  get status() {
    if (this.isNew) return 'new-status';
    if (this.isHot) return 'hot-status';
    return '';
  }

  override render() {
    return html`
      <div class="topic">
        <div class="topic-info">
          <div class="topic-icon"></div>
          <div class="topic-details">
            <arx-eve-link
              class="${this.status}"
              href="/arbor/topics/${this.id}"
            >
              ${this.title}
            </arx-eve-link>
            <p>${this.description}</p>
          </div>
        </div>
        <div class="stats-container">
          <div class="last-post-section">
            <arx-nostr-profile npub="${this.lastPostBy}"></arx-nostr-profile>
            <div class="last-post-info">
              ${formatDateTime(this.lastPostTime)}
            </div>
          </div>
        </div>
      </div>
    `;
  }
}