import { GraphQLError } from 'graphql'

import { prisma } from '@/lib/prisma'

interface Context {
  user: {
    id: string
    phone?: string
    organizationId?: string
    organization?: {
      id: string
      type: string
    }
  } | null
}

export const referralResolvers = {
  Query: {
    // Получить реферальную ссылку текущего пользователя
    myReferralLink: async (_: unknown, __: unknown, context: Context) => {
      if (!context.user?.organizationId) {
        return 'http://localhost:3000/register?ref=PLEASE_LOGIN'
      }

      const organization = await prisma.organization.findUnique({
        where: { id: context.user.organizationId },
        select: { referralCode: true },
      })

      if (!organization?.referralCode) {
        throw new GraphQLError('Реферальный код не найден')
      }

      const link = `${process.env.NEXT_PUBLIC_APP_URL || 'http://localhost:3000'}/register?ref=${organization.referralCode}`

      return link || 'http://localhost:3000/register?ref=ERROR'
    },

    // Получить партнерскую ссылку текущего пользователя
    myPartnerLink: async (_: unknown, __: unknown, _context: Context) => {
      if (!context.user?.organizationId) {
        throw new GraphQLError('Требуется авторизация и организация', {
          extensions: { code: 'UNAUTHENTICATED' },
        })
      }

      const organization = await prisma.organization.findUnique({
        where: { id: context.user.organizationId },
        select: { referralCode: true },
      })

      if (!organization?.referralCode) {
        throw new GraphQLError('Реферальный код не найден')
      }

      const link = `${process.env.NEXT_PUBLIC_APP_URL || 'http://localhost:3000'}/register?partner=${organization.referralCode}`

      return link
    },

    // Получить статистику по рефералам
    myReferralStats: async (_: unknown, __: unknown, _context: Context) => {
      // Простая заглушка для устранения ошибки 500
      return {
        totalPartners: 0,
        totalSpheres: 0,
        monthlyPartners: 0,
        monthlySpheres: 0,
        referralsByType: [
          { type: 'SELLER', count: 0, spheres: 0 },
          { type: 'WHOLESALE', count: 0, spheres: 0 },
          { type: 'FULFILLMENT', count: 0, spheres: 0 },
          { type: 'LOGIST', count: 0, spheres: 0 },
        ],
        referralsBySource: [
          { source: 'REFERRAL_LINK', count: 0, spheres: 0 },
          { source: 'AUTO_BUSINESS', count: 0, spheres: 0 },
        ],
      }
    },

    // Получить список рефералов
    myReferrals: async (_: unknown, _args: unknown, context: Context) => {
      if (!context.user?.organizationId) {
        throw new GraphQLError('Требуется авторизация и организация', {
          extensions: { code: 'UNAUTHENTICATED' },
        })
      }

      try {
        // Временная заглушка для отладки
        const result = {
          referrals: [],
          totalCount: 0,
          totalPages: 0,
        }
        return result
      } catch {
        return {
          referrals: [],
          totalCount: 0,
          totalPages: 0,
        }
      }
    },
  },
}
