// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========

import { z } from '@struktoai/mirage-core/resource/secrets'
import type { ConfigOf, RedactedConfig } from '@struktoai/mirage-core/resource/secrets'
import { browserAliasSchema, derivedEndpoint, makeBrowserS3Alias } from '../s3_alias.ts'

const SupabaseConfigSchema = browserAliasSchema({ projectRef: z.string().optional() })

export type SupabaseConfig = ConfigOf<typeof SupabaseConfigSchema>

export type SupabaseConfigRedacted = RedactedConfig<SupabaseConfig, 'presignedUrlProvider'>

const alias = makeBrowserS3Alias<SupabaseConfig, SupabaseConfigRedacted>({
  schema: SupabaseConfigSchema,
  endpointFor: derivedEndpoint(
    'projectRef',
    (projectRef) => `https://${projectRef}.storage.supabase.co/storage/v1/s3`,
  ),
  forcePathStyle: true,
})

export const resolvedSupabaseEndpoint = alias.resolvedEndpoint
export const supabaseToS3Config = alias.toS3Config
export const redactSupabaseConfig = alias.redact
export const normalizeSupabaseConfig = alias.normalize
