import { requirePermission } from "@/lib/auth/session";
import { getChannelWithAccess, getMessages, getReadReceipts } from "@/lib/chat/queries";
import { getPresenceInfoMap } from "@/lib/presence.server";
import { MessageThread } from "./MessageThread";
import { ChannelHeader } from "./ChannelHeader";

export default async function ChannelPage({
  params,
}: {
  params: Promise<{ channelId: string }>;
}) {
  const session = await requirePermission("chat.view");
  const { channelId } = await params;

  const channel = await getChannelWithAccess(channelId, session.user.id);

  if (!channel) {
    return (
      <div className="card chat-col items-center justify-center text-center" style={{ padding: 28 }}>
        <h2>Kanal nicht verfügbar</h2>
        <p className="text-muted mt-2 text-sm">
          Dieser Kanal existiert nicht oder du bist kein Mitglied.
        </p>
        <a href="/chat" className="btn btn-ghost mt-4">
          Zurück zur Übersicht
        </a>
      </div>
    );
  }

  const messages = (await getMessages(channelId, session.user.id)) ?? [];
  const receipts = await getReadReceipts(channelId, session.user.id);
  const canSend = Boolean(session.user.permissions?.includes("chat.send"));

  // Gruppen darf die Ersteller:in löschen — Admins jede Gruppe.
  const canDelete =
    channel.type === "GROUP" &&
    (channel.createdById === session.user.id ||
      Boolean(session.user.permissions?.includes("admin.access")));

  const presence = await getPresenceInfoMap(channel.members.map((m) => m.id));
  const subtitle =
    channel.type === "DIRECT"
      ? "Direktnachricht"
      : `${channel.memberCount} Mitglieder`;

  return (
    <div className="card chat-col" style={{ padding: 0, overflow: "hidden" }}>
      <ChannelHeader
        channelId={channel.id}
        type={channel.type}
        title={channel.title}
        avatarUrl={channel.avatarUrl}
        subtitle={subtitle}
        canEditAvatar={channel.canEditAvatar}
        canSend={canSend}
        canDelete={canDelete}
        otherUserId={channel.otherUserId}
        initialPresence={presence}
      />
      <MessageThread
        channelId={channel.id}
        initialMessages={messages}
        currentUserId={session.user.id}
        canSend={canSend}
        members={channel.members}
        initialPresence={presence}
        initialReceipts={receipts}
      />
    </div>
  );
}
