import { useState, useEffect } from "react"
import toastError from "../../errors/toastError"

import api from "../../services/api"

const useTickets = ({
	searchParam,
	searchParamContent,
	pageNumber,
	status,
	date,
	showAll,
	queueIds,
	withUnreadMessages,
	unlimited,
	tab
}) => {
	const [loading, setLoading] = useState(true)
	const [hasMore, setHasMore] = useState(false)
	const [tickets, setTickets] = useState([])
	const [remoteTicketsControll, setRemoteTicketsControll] = useState([])



	useEffect(() => {

		setLoading(true)
		const delayDebounceFn = setTimeout(() => {
			const fetchTickets = async () => {
				try {

					if ((tab === 'search') && (!searchParam || searchParam.trim().length === 0 || searchParam.trim().length > 40 || searchParam.endsWith(' '))) {
						return
					}

					const { data } = await api.get("/tickets", {
						params: {
							searchParam,
							searchParamContent,
							pageNumber,
							status,
							date,
							showAll,
							queueIds,
							withUnreadMessages,
							unlimited
						},
					}) 

					setTickets(data.tickets)
					setHasMore(data.hasMore)
					setLoading(false) 
 
					if (data?.remoteTicketsControll) {
						setRemoteTicketsControll(data.remoteTicketsControll.map(t => +t))
					}



				} catch (err) {
					setLoading(false)
					toastError(err)
				}
			}
			fetchTickets()
		}, 500)
		return () => clearTimeout(delayDebounceFn)
	}, [
		searchParam,
		searchParamContent,
		pageNumber,
		status,
		date,
		showAll,
		queueIds,
		withUnreadMessages,
		tab,
		unlimited
	])

	return { tickets, loading, hasMore, remoteTicketsControll }
}

export default useTickets