/**
 * Onboarding logo upload — presigned R2 PUT (Task 5).
 *
 * Reuses portal-file-storage presign pattern (aws4fetch / createPresignedUrl).
 */
import { createSignedPutUrl } from '../lib/portal-file-storage'
import type { Env } from '../env'

export const MAX_ONBOARDING_LOGO_BYTES = 2 * 1024 * 1024

const CONTENT_TYPE_EXT: Record<'image/png' | 'image/jpeg', string> = {
  'image/png': 'png',
  'image/jpeg': 'jpg',
}

export function buildOnboardingLogoKey(
  tenantId: string,
  contentType: 'image/png' | 'image/jpeg',
): string {
  const ext = CONTENT_TYPE_EXT[contentType]
  return `tenants/${tenantId}/logo.${ext}`
}

export function buildOnboardingLogoPublicUrl(env: Env, r2Key: string): string {
  const base = (env.APP_BASE_URL ?? '').replace(/\/$/, '')
  if (!base) {
    throw new Error('APP_BASE_URL not configured')
  }
  const suffix = r2Key.replace(/^tenants\//, '')
  return `${base}/api/public/tenant-logo/${suffix}`
}

export async function createOnboardingLogoUpload(
  env: Env,
  tenantId: string,
  contentType: 'image/png' | 'image/jpeg',
  fileSizeBytes: number,
): Promise<{ upload_url: string; logo_url: string }> {
  const r2Key = buildOnboardingLogoKey(tenantId, contentType)
  const upload_url = await createSignedPutUrl(env, r2Key, {
    contentType,
    contentLength: fileSizeBytes,
    expiresIn: 300,
  })
  const logo_url = buildOnboardingLogoPublicUrl(env, r2Key)
  return { upload_url, logo_url }
}

export { MAX_ONBOARDING_LOGO_BYTES as maxLogoBytes }
