import { router, protectedProcedure } from '@/src/trpc/trpc-index';
import { z } from 'zod';
import { generateUploadUrl } from '@/src/lib/s3-client';
import { ApiError } from '@/src/lib/api-error';

export const fileUploadRouter = router({
  generateUploadUrls: protectedProcedure
    .input(z.object({
      contextString: z.enum(['review', 'product_info', 'notification', 'complaint', 'profile', 'tags']),
      mimeTypes: z.array(z.string()),
    }))
    .mutation(async ({ input }): Promise<{ uploadUrls: string[] }> => {
      const { contextString, mimeTypes } = input;

      const uploadUrls: string[] = [];
      const keys: string[] = [];

      for (const mimeType of mimeTypes) {
        // Generate key based on context and mime type
        let folder: string;
        if (contextString === 'review') {
          folder = 'review-images';
        } else if(contextString === 'product_info') {
          folder = 'product-images';
        }
        //  else if(contextString === 'review_response') {
        //   folder = 'review-response-images'
        // } 
        else if(contextString === 'notification') {
          folder = 'notification-images'
        } else if (contextString === 'complaint') {
          folder = 'complaint-images'
        } else if (contextString === 'profile') {
          folder = 'profile-images'
        } else if (contextString === 'tags') {
          folder = 'tags'
        } else {
          folder = '';
        }

        const extension = mimeType === 'image/jpeg' ? '.jpg' :
                          mimeType === 'image/png' ? '.png' :
                          mimeType === 'image/gif' ? '.gif' : '.jpg';
        const key = `${folder}/${Date.now()}${extension}`;

        try {
          const uploadUrl = await generateUploadUrl(key, mimeType);
          uploadUrls.push(uploadUrl);
          keys.push(key);
          
        } catch (error) {
          console.error('Error generating upload URL:', error);
          throw new ApiError('Failed to generate upload URL', 500);
        }
      }
      
      return { uploadUrls };
    }),
});

export type FileUploadRouter = typeof fileUploadRouter;
