import { logger } from './logger';

// Types
export interface Logger {
  error: typeof logger.error;
  success: typeof logger.success;
  info: typeof logger.info;
  warning: typeof logger.warning;
  log: typeof logger.log;
}

// Pure functions for logging
export const logError = (logger: Logger, message: string): void => {
  logger.error(message);
};

export const logSuccess = (logger: Logger, message: string): void => {
  logger.success(message);
};

export const logInfo = (logger: Logger, message: string): void => {
  logger.info(message);
};

export const logWarning = (logger: Logger, message: string): void => {
  logger.warning(message);
};

export const logDebug = (logger: Logger, message: string): void => {
  logger.log(message);
};

// Domain specific logging functions
export const logDomainCreationSuccess = (logger: Logger, domainName: string, domainPath: string): void => {
  logSuccess(logger, `Domain "${domainName}" created successfully!`);
  logInfo(logger, `Location: ${domainPath}`);
};

export const logDomainDeletionSuccess = (logger: Logger, domainName: string): void => {
  logSuccess(logger, `Domain "${domainName}" deleted successfully!`);
};

export const logDomainAlreadyExists = (logger: Logger, domainName: string, domainPath: string): void => {
  logError(logger, `Domain "${domainName}" already exists at ${domainPath}`);
};

export const logDomainNotFound = (logger: Logger, domainName: string, domainPath: string): void => {
  logError(logger, `Domain "${domainName}" not found at ${domainPath}`);
};

export const logInvalidDomainName = (logger: Logger, domainName: string): void => {
  logError(logger, `❌ Invalid domain name: "${domainName}"`);
  logError(logger, '💡 Domain names must be valid TypeScript identifiers:');
  logError(logger, '   - Start with a letter or underscore');
  logError(logger, '   - Contain only letters, numbers, and underscores');
  logError(logger, '   - No hyphens, spaces, or special characters');
  logError(logger, '📝 Examples: "user", "userProfile", "user_profile", "orderManagement"');
};

export const logNoDomainsFound = (logger: Logger, domainsPath: string): void => {
  logInfo(logger, 'No domains found in src/domains.');
  logInfo(logger, '💡 Use "ruch create <domain-name>" to create your first domain.');
};

export const logDomainsListed = (logger: Logger, domainCount: number, domainsPath: string): void => {
  logSuccess(logger, `${domainCount} domain(s) found:`);
  logInfo(logger, `Total: ${domainCount} domain(s)`);
  logInfo(logger, `Location: ${domainsPath}`);
}; 