import type { Metadata } from "next";
import React from "react";
import SessionWidget from "@/modules/sessionModule/list/components/SessionWidget";
import StationWidget from "@/modules/chargepointModule/list/sections/StationWidget";
import NearestChargerWidget from "@/components/home-widgets/NearestChargerWidget";
import { WidgetNewsModule } from "@/modules/newsModule/";
import { cookies } from "next/headers";
import { JWTClaims, decrypt } from "@/lib/session";
import { SessionQueryParams } from "@/services/session/sessionService";
import { getSessionsAction } from "@/modules/sessionModule/list/actions/session.action";
import { Session } from "@/types/session/session";
import { getServerAuthData } from "@/lib/server-auth";
import { AddToHomeTutorialGate } from "@/modules/walletModule/components/AddToHomeTutorialGate";
import { resolveTenantBranding } from "@/lib/tenantPresentation.server";

export const dynamic = "force-dynamic";

export async function generateMetadata(): Promise<Metadata> {
  const branding = await resolveTenantBranding();
  const fallbackTitle = "Home";
  const fallbackDescription = "Home";
  return {
    title: `${branding.displayName || fallbackTitle} - Home`,
    description: branding.displayName ? `${branding.displayName} - Home` : fallbackDescription,
    icons: { icon: branding.logoUrl || "/images/favicon.ico" },
  };
}

export default async function Tiar() {
  const orgCode = "";

  // Use getServerAuthData to handle token refresh automatically
  const authData = await getServerAuthData();
  const accessToken = authData?.accessToken || "";
  const claims = authData?.claims || null;

  let initialSessions: Session[] = [];
  if (claims?.user_id) {
    const params = {
      organization_code: orgCode,
      user_id: claims?.user_id,
      status: "Started,Ended",
      paginate_limit: 5,
    } as Partial<SessionQueryParams>;
    const res = await getSessionsAction(params, accessToken);
    if (res && res.data) {
      initialSessions = res.data;
    }
  }

  return (
    <div className="grid grid-cols-12 gap-4 md:gap-6">
      <AddToHomeTutorialGate />
      {/* PRIORITY 1: Hero Section - Nearest Station */}
      <div className="col-span-12 mb-4 md:mb-6">
        <NearestChargerWidget />
      </div>

      {/* PRIORITY 2: Tertiary Info - Latest News  */}
      <div className="col-span-12">
        <WidgetNewsModule orgCode={orgCode} />
      </div>

      {/* PRIORITY 3: Secondary Info - Available Stations & Recent Sessions */}
      <div className="col-span-12 grid grid-cols-1 md:grid-cols-2 gap-4 md:gap-6 mb-4 md:mb-6">
        <div className="h-full">
          <StationWidget />
        </div>
        <div className="h-full">
          <SessionWidget
            initialSessions={initialSessions}
            userId={claims?.user_id}
            accessToken={accessToken}
            orgCode={orgCode}
          />
        </div>
      </div>
    </div>
  );
}
