const stripTrailingSlash = (value: string): string => value.replace(/\/+$/, '')

const sanitizePathPart = (value: string): string =>
  value
    .split('/')
    .map((segment) => segment.trim())
    .filter(Boolean)
    .join('/')

const parseBucketInput = (rawBucket: string): { bucket: string; pathPrefix: string } => {
  const normalizedInput = rawBucket
    .trim()
    .replace(/^gs:\/\//, '')
    .replace(/^https?:\/\/storage\.googleapis\.com\//, '')

  const [bucket = '', ...rest] = normalizedInput.split('/').filter(Boolean)

  return {
    bucket: bucket.trim(),
    pathPrefix: sanitizePathPart(rest.join('/')),
  }
}

const rawBucket = process.env.GCS_BUCKET || ''
const parsed = parseBucketInput(rawBucket)
const envPrefix = sanitizePathPart(process.env.GCS_PREFIX || '')

// Priority:
// 1. Explicit GCS_PREFIX environment variable
// 2. Path part extracted from GCS_BUCKET (legacy support)
// 3. Fallback default
const defaultPrefix = 'karmapitchbookimages'
const prefix = envPrefix || parsed.pathPrefix || defaultPrefix

const publicHost = stripTrailingSlash(
  process.env.NEXT_PUBLIC_GOOGLE_STORAGE_URL || 'https://storage.googleapis.com',
)

const bucketBaseURL = parsed.bucket ? `${publicHost}/${parsed.bucket}` : '/media'
const staticURL = `${bucketBaseURL}${prefix ? `/${prefix}` : ''}`

export const gcsConfig = {
  bucket: parsed.bucket,
  bucketBaseURL,
  prefix,
  staticURL,
}
