/**
 * Centralized Application, Branding, Contact & URL Configuration.
 * Compatible with both Server and Client environments (using NEXT_PUBLIC_ prefixes).
 */

export const APP_CONFIG = {
  name: process.env.NEXT_PUBLIC_APP_NAME || 'DigiPixora — Meta Pixel & Ads',
  description: 'Manage Multi Facebook Pixels, Conversions API (CAPI), and Dynamic Product Feeds for Shopify',
  companyName: process.env.NEXT_PUBLIC_COMPANY_NAME || 'Digihorizon',
  companyWebsite: process.env.NEXT_PUBLIC_COMPANY_WEBSITE || 'https://digihorizon.in',
  supportEmail: process.env.NEXT_PUBLIC_SUPPORT_EMAIL || 'ashvin@digihorizon.in',
  supportPhone: process.env.NEXT_PUBLIC_SUPPORT_PHONE || '+91 8000361445',
  supportPhoneRaw: process.env.NEXT_PUBLIC_SUPPORT_PHONE_RAW || '+918000361445',
  env: process.env.APP_ENV || process.env.NODE_ENV || 'development',
  isDev: (process.env.APP_ENV || process.env.NODE_ENV) !== 'production',
  isProd: (process.env.APP_ENV || process.env.NODE_ENV) === 'production',
} as const;

/**
 * Normalizes and returns canonical Base URL without trailing slash.
 */
export function getAppBaseUrl(): string {
  const url =
    process.env.SHOPIFY_APP_URL ||
    process.env.NEXT_PUBLIC_APP_URL ||
    process.env.APP_URL ||
    (typeof window !== 'undefined' ? window.location.origin : 'http://localhost:3000');

  return url.replace(/\/+$/, '');
}

/**
 * Constructs absolute URLs derived cleanly from the canonical base URL without double slashes.
 */
export function buildAppUrl(path: string = '', params?: Record<string, string>): string {
  const baseUrl = getAppBaseUrl();
  if (!path) {
    if (!params || Object.keys(params).length === 0) return baseUrl;
    const query = new URLSearchParams(params).toString();
    return query ? `${baseUrl}?${query}` : baseUrl;
  }

  const cleanPath = path.startsWith('/') ? path : `/${path}`;
  const url = `${baseUrl}${cleanPath}`;

  if (!params || Object.keys(params).length === 0) {
    return url;
  }

  const query = new URLSearchParams(params).toString();
  return query ? `${url}?${query}` : url;
}

/**
 * String route paths used across the application.
 */
export const APP_PATHS = {
  home: '/',
  pricing: '/pricing',
  pixel: '/pixel',
  catalog: '/catalog',
  events: '/events',
  settings: '/settings',
  privacy: '/privacy',
  terms: '/terms',
  diagnostics: '/diagnostics',
  analytics: '/analytics',
  adsReport: '/ads-report',
  help: '/help',
  auth: {
    shopify: '/api/auth/shopify',
    callback: '/api/auth/shopify/callback',
  },
  webhooks: {
    shopify: '/api/webhooks/shopify',
    shopifyGdpr: '/api/webhooks/shopify/gdpr',
  },
  catalogUrls: {
    feedXml: '/api/catalog/feed/meta.xml',
    feedCsv: '/api/catalog/feed/meta.csv',
  },
} as const;

/**
 * Derived Canonical URLs for Shopify App Store compliance, OAuth, and navigation.
 */
export const APP_URLS = {
  base: getAppBaseUrl,
  paths: APP_PATHS,
  privacy: () => buildAppUrl(APP_PATHS.privacy),
  terms: () => buildAppUrl(APP_PATHS.terms),
  diagnostics: () => buildAppUrl(APP_PATHS.diagnostics),
  pricing: () => buildAppUrl(APP_PATHS.pricing),
  help: () => buildAppUrl(APP_PATHS.help),
  pixel: () => buildAppUrl(APP_PATHS.pixel),
  catalog: () => buildAppUrl(APP_PATHS.catalog),
  events: () => buildAppUrl(APP_PATHS.events),
  settings: () => buildAppUrl(APP_PATHS.settings),
  auth: () => buildAppUrl(APP_PATHS.auth.shopify),
  authCallback: () => buildAppUrl(APP_PATHS.auth.callback),
  webhook: () => buildAppUrl(APP_PATHS.webhooks.shopify),
  gdprWebhook: () => buildAppUrl(APP_PATHS.webhooks.shopifyGdpr),
  metaFeedXml: (shop?: string) => buildAppUrl(APP_PATHS.catalogUrls.feedXml, shop ? { shop } : undefined),
  metaFeedCsv: (shop?: string) => buildAppUrl(APP_PATHS.catalogUrls.feedCsv, shop ? { shop } : undefined),
  webhooks: APP_PATHS.webhooks,
  catalogUrls: APP_PATHS.catalogUrls,
} as const;
