const fs = require('fs');
const path = require('path');

const projectRoot = path.resolve(__dirname, '..');
const clientFilePath = path.join(projectRoot, 'frontend-web', 'src', 'api', 'base44Client.js');

const patchedMock = `// import { createClient } from '@base44/sdk';

// --- MIGRATION MOCK ---
// This mock completely disables the Base44 SDK to allow for local development.
// It also simulates user roles for the RoleSwitcher component.

const MOCK_USER_KEY = 'krow_mock_user_role';

// Default mock user data
const DEFAULT_MOCK_USER = {
  id: "mock-user-123",
  email: "dev@example.com",
  full_name: "Dev User",
  // 'role' is the Base44 default, 'user_role' is our custom field
  role: "admin",
  user_role: "admin", // Default role for testing
  profile_picture: "https://i.pravatar.cc/150?u=a042581f4e29026024d",
};

// Function to get the current mock user state
const getMockUser = () => {
  try {
    const storedRole = localStorage.getItem(MOCK_USER_KEY);
    if (storedRole) {
      return { ...DEFAULT_MOCK_USER, user_role: storedRole, role: storedRole };
    }
    // If no role is stored, set the default and return it
    localStorage.setItem(MOCK_USER_KEY, DEFAULT_MOCK_USER.user_role);
    return DEFAULT_MOCK_USER;
  } catch (e) {
    // localStorage is not available (e.g., in SSR)
    return DEFAULT_MOCK_USER;
  }
};

export const base44 = {
  auth: {
    me: () => Promise.resolve(getMockUser()),
    logout: () => {
      try {
        localStorage.removeItem(MOCK_USER_KEY); // Clear role on logout
        // Optionally, redirect to login page or reload
        window.location.reload();
      } catch (e) {
        // localStorage is not available
      }
      return Promise.resolve();
    },
    updateMe: (data) => {
      try {
        if (data.user_role) {
          localStorage.setItem(MOCK_USER_KEY, data.user_role);
        }
      } catch (e) {
        // localStorage is not available
      }
      // Simulate a successful update
      return Promise.resolve({ ...getMockUser(), ...data });
    },
  },
  entities: {
    ActivityLog: {
      filter: () => Promise.resolve([]),
    },
    // Add other entity mocks as needed for the RoleSwitcher to function
    // For now, the RoleSwitcher only updates the user role, so other entities might not be critical.
  },
  integrations: {
    Core: {
      SendEmail: () => Promise.resolve({ status: "sent" }),
      UploadFile: () => Promise.resolve({ file_url: "mock-file-url" }),
      InvokeLLM: () => Promise.resolve({ result: "mock-ai-response" }),
      // Add other integration mocks if the RoleSwitcher indirectly calls them
    }
  }
};`;

try {
  const content = fs.readFileSync(clientFilePath, 'utf8');

  // Check if the file is the original, unpatched version from the export
  if (content.includes("createClient({")) {
    fs.writeFileSync(clientFilePath, patchedMock, 'utf8');
    console.log('✅ Successfully patched frontend-web/src/api/base44Client.js');
  } else if (content.includes("const MOCK_USER_KEY")) {
    console.log('ℹ️ base44Client.js is already patched. Skipping.');
  } else {
    console.error('❌ Patching failed: Could not find the expected code in base44Client.js. The export format may have changed.');
    process.exit(1);
  }
} catch (error) {
  console.error('❌ An error occurred during patching:', error);
  process.exit(1);
}