import { gql, useQuery } from '@apollo/client'
import InfiniteScroll from 'react-infinite-scroll-component'

import { FeedQuery, FeedQueryVariables } from './__generated__/index.generated'

const FEED_QUERY = gql`
	query FeedQuery($first: Int, $after: ID) {
		feed(first: $first, after: $after) {
			edges {
				cursor
				node {
					image
					id
					user {
						username
					}
				}
			}
			pageInfo {
				endCursor
				hasNextPage
			}
		}
	}
`

export function Feed() {
	const { data, error, fetchMore } = useQuery<FeedQuery, FeedQueryVariables>(
		FEED_QUERY,
		{
			variables: { first: 5, after: null },
			notifyOnNetworkStatusChange: true,
			fetchPolicy: 'cache-first',
		}
	)

	if (error) {
		console.log(error.message)
		return <div>An error occurred</div>
	}
    
	if (!data) return <div>loading</div>

	return (
		<div className="bg-gray-800 px-4 py-6 shadow sm:p-6 sm:rounded-lg">
			<InfiniteScroll
				hasMore={data.feed.pageInfo.hasNextPage}
				next={async () =>
					await fetchMore({
						variables: {
							first: 5,
							after: data.feed.pageInfo.endCursor,
						},
					})
				}
				dataLength={data.feed.edges.length}
				loader={<h3>Loading</h3>}
			>
				{data?.feed.edges.map((edge) => (
					<li key={edge?.cursor} className="border-t border-b border-white">
						<div>{edge?.node.user.username}</div>
						<p>
							Lorem ipsum dolor sit amet, consectetur adipisicing elit. Porro
							tenetur explicabo rem molestias deleniti necessitatibus, fuga
							nihil, est nostrum tempore accusamus eveniet accusantium quaerat
							cumque illum laborum excepturi, officiis quos. Cumque obcaecati
							assumenda deleniti odio vero commodi quas beatae.
						</p>
					</li>
				))}
			</InfiniteScroll>
		</div>
	)
}