"use client"

import { _ } from "@/lib/translation"
import { trpc } from "@/lib/trpc/client"

import Container from "../Container"
import Header from "../Header"
import ListContainer from "../ListContainer"
import ShowMoreButton from "../ShowMoreButton"
import StayList from "../StayList"
import EmptyUpcomingStaysBlock from "./EmptyUpcomingStays"

import type { Page } from "@/types/components/myPages/myStays/page"
import type { LangParams } from "@/types/params"

export default function UpcomingStays({ lang }: LangParams) {
  const { data, hasNextPage, isFetching, fetchNextPage } =
    trpc.user.stays.upcoming.useInfiniteQuery(
      {},
      {
        getNextPageParam: (lastPage: Page) => lastPage.nextCursor,
      }
    )

  function loadMoreData() {
    fetchNextPage()
  }

  return (
    <Container>
      <Header
        title={_("Upcoming stays")}
        subtitle={_(
          "Excited about your next trip? So are we. Below are your upcoming stays with us, complete with all the details you need to make each visit perfect. Can't wait to welcome you back, friend!"
        )}
      ></Header>
      {data?.pages.length ? (
        <ListContainer>
          <StayList
            lang={lang}
            stays={data?.pages.flatMap((page) => page.data) ?? []}
          />
          {hasNextPage ? (
            <ShowMoreButton disabled={isFetching} loadMoreData={loadMoreData} />
          ) : null}
        </ListContainer>
      ) : (
        <EmptyUpcomingStaysBlock />
      )}
    </Container>
  )
}
