import { captureEvent, identifyUser, captureRevenue } from '@/lib/posthog'

// User lifecycle events
export const trackUserSignup = (user: any, method: string = 'email') => {
  identifyUser(user.id, {
    email: user.email,
    name: user.name,
    userType: user.userType, // 'contractor' or 'homeowner'
    signupDate: new Date().toISOString()
  })

  captureEvent('user_signup_completed', {
    userType: user.userType,
    signupMethod: method,
    referralSource: document.referrer || 'direct'
  })
}

export const trackProfileCompletion = (user: any, completionPercentage: number) => {
  captureEvent('profile_completed', {
    userType: user.userType,
    completionPercentage,
    fieldsCompleted: Object.keys(user).filter(key => user[key] !== null && user[key] !== '')
  })
}

// Job-related events
export const trackJobPosted = (job: any) => {
  captureEvent('job_posted', {
    jobId: job.id,
    category: job.category,
    budgetRange: job.budgetRange,
    location: job.location,
    urgency: job.urgency,
    expectedQuotes: job.expectedQuotes,
    hasPhotos: job.photos && job.photos.length > 0,
    descriptionLength: job.description?.length || 0
  })
}

export const trackJobViewed = (job: any, viewerType: string) => {
  captureEvent('job_viewed', {
    jobId: job.id,
    category: job.category,
    viewerType, // 'homeowner' or 'contractor'
    budgetRange: job.budgetRange,
    location: job.location
  })
}

export const trackQuoteSubmitted = (quote: any) => {
  captureEvent('quote_submitted', {
    jobId: quote.jobId,
    contractorId: quote.contractorId,
    quoteAmount: quote.amount,
    estimatedDuration: quote.estimatedDuration,
    materialsIncluded: quote.materialsIncluded,
    messageLength: quote.message?.length || 0
  })
}

export const trackQuoteAccepted = (job: any, quote: any) => {
  captureEvent('contractor_hired', {
    jobId: job.id,
    contractorId: quote.contractorId,
    homeownerId: job.homeownerId,
    quoteAmount: quote.amount,
    jobCategory: job.category,
    numberOfQuotes: job.quotesReceived
  })
}

// Payment events
export const trackPaymentProcessed = (payment: any) => {
  captureRevenue(payment.amount, {
    jobId: payment.jobId,
    paymentMethod: payment.method,
    paymentType: payment.type, // 'deposit', 'milestone', 'final'
    contractorId: payment.contractorId,
    processingFee: payment.processingFee
  })
}

export const trackPaymentFailed = (payment: any, error: string) => {
  captureEvent('payment_failed', {
    jobId: payment.jobId,
    amount: payment.amount,
    paymentMethod: payment.method,
    paymentType: payment.type,
    error: error
  })
}

// Search and discovery
export const trackJobSearch = (query: string, filters: any, resultsCount: number) => {
  captureEvent('job_search_performed', {
    query,
    filters: {
      category: filters.category,
      location: filters.location,
      budget: filters.budgetRange,
      urgency: filters.urgency
    },
    resultsCount
  })
}

export const trackContractorSearch = (query: string, filters: any, resultsCount: number) => {
  captureEvent('contractor_search_performed', {
    query,
    filters: {
      location: filters.location,
      rating: filters.minRating,
      specialties: filters.specialties
    },
    resultsCount
  })
}

// Feature usage
export const trackFeatureUsed = (feature: string, action: string, properties?: any) => {
  captureEvent('feature_used', {
    feature,
    action,
    ...properties
  })
}

// Error tracking
export const trackError = (error: Error, context: string, additionalData?: any) => {
  captureEvent('application_error', {
    error: error.message,
    stack: error.stack,
    context,
    url: window.location.href,
    userAgent: navigator.userAgent,
    ...additionalData
  })
}

// Communication events
export const trackMessageSent = (message: any) => {
  captureEvent('message_sent', {
    conversationId: message.conversationId,
    senderType: message.senderType, // 'homeowner' or 'contractor'
    messageLength: message.content.length,
    hasAttachment: !!message.attachment,
    jobId: message.jobId
  })
}

// Review events
export const trackReviewSubmitted = (review: any) => {
  captureEvent('review_submitted', {
    jobId: review.jobId,
    reviewerType: review.reviewerType,
    rating: review.rating,
    hasComment: !!review.comment,
    commentLength: review.comment?.length || 0
  })
}