import type { NuxtAxiosInstance } from '@nuxtjs/axios'
import { z } from 'zod'

export const TikTokAccountSchema = z.object({
  id: z.number(),
  name: z.string(),
  follower: z.number(),
  disabled: z.boolean(),
  deniedApproval: z.boolean(),
})

export type TikTokAccount = z.infer<typeof TikTokAccountSchema>

export const createTikTokAccount =
  (axios: NuxtAxiosInstance) => (creatorId: number, form: { name: string }) => {
    return axios
      .post(`/dashboard/api/v1/${creatorId}/tiktok`, form)
      .then(response => TikTokAccountSchema.parse(response.data))
  }

export const listTikTokAccounts =
  (axios: NuxtAxiosInstance) => (creatorId: number) => {
    return axios
      .$get(`/dashboard/api/v1/${creatorId}/tiktok`)
      .then(z.array(TikTokAccountSchema).parse)
  }

export const deleteTikTokAccount =
  (axios: NuxtAxiosInstance) => (creatorId: number, tiktokId: number) =>
    axios.$delete(`/dashboard/api/v1/${creatorId}/tiktok?id=${tiktokId}`)

export const updateTikTokAccount =
  (axios: NuxtAxiosInstance) =>
  (creatorId: number, tiktokId: number, form: { name: string }) => {
    return axios
      .$put(`/dashboard/api/v1/${creatorId}/tiktok?id=${tiktokId}`, form)
      .then(TikTokAccountSchema.parse)
  }
