import { z } from 'zod'

import { HttpServer, type THttpServer } from '~/libs/http-server'

const authorSchema = z.object({
  id: z.string(),
  name: z.string(),
  profile_picture: z.string(),
})

const categoriesCodeSchema = z.array(
  z.object({
    id: z.string(),
    name: z.string(),
    code: z.string(),
  }),
)
const newsSchema = z.object({
  data: z.array(
    z.object({
      id: z.string(),
      title: z.string(),
      content: z.string(),
      categories: categoriesCodeSchema,
      tags: z.array(
        z.object({
          id: z.string(),
          name: z.string(),
          code: z.string(),
        }),
      ),
      is_premium: z.boolean(),
      slug: z.string(),
      featured_image: z.string(),
      author_id: z.string(),
      live_at: z.string(),
      created_at: z.string(),
      updated_at: z.string(),
      author: authorSchema,
    }),
  ),
})

export type TAuthor = z.infer<typeof authorSchema>
export type TCategories = z.infer<typeof categoriesCodeSchema>

export const getNews = async (parameters: THttpServer) => {
  try {
    const { data } = await HttpServer(parameters).get(`/api/news`)
    return newsSchema.parse(data)
  } catch (error) {
    // eslint-disable-next-line unicorn/no-useless-promise-resolve-reject
    return Promise.reject(error)
  }
}
