import React from 'react';
import { ProtectedRoute } from '@/features/auth/components/ProtectedRoute';
import { PermissionRoute } from '@/features/auth/components/PermissionRoute';
import type { PermissionCheck } from '@/features/auth/constants/permissions';
import { ROUTE_PERMISSIONS } from '@/shared/config/routePermissions';

interface AppRouteProps {
  path?: string;
  permission?: PermissionCheck;
  superAdminOnly?: boolean;
  children: React.ReactNode;
}

export const AppRoute: React.FC<AppRouteProps> = ({
  path,
  permission,
  superAdminOnly,
  children,
}) => {
  const rule = path ? ROUTE_PERMISSIONS[path] : undefined;
  const resolvedPermission = permission ?? rule?.permission;
  const resolvedSuperAdmin = superAdminOnly ?? rule?.superAdminOnly;

  if (!resolvedPermission && !resolvedSuperAdmin) {
    return <ProtectedRoute>{children}</ProtectedRoute>;
  }

  return (
    <ProtectedRoute>
      <PermissionRoute permission={resolvedPermission} superAdminOnly={resolvedSuperAdmin}>
        {children}
      </PermissionRoute>
    </ProtectedRoute>
  );
};
