/**
 * Welcome Feature Service - Business logic with AppKit integration
 * @module {{projectName}}/welcome-service
 * @file {{projectName}}/src/api/features/{featureName}/{featureName}.service.ts
 *
 * @llm-rule WHEN: Need business logic layer with validation, logging, and config
 * @llm-rule AVOID: Direct database calls from routes - always use service layer
 * @llm-rule NOTE: Demonstrates AppKit logger, config, and error patterns for FBCA
 */

import { loggerClass } from '@bloomneo/appkit/logger';
import { configClass } from '@bloomneo/appkit/config';
import { errorClass } from '@bloomneo/appkit/error';
import type { WelcomeResponse, PersonalizedWelcomeResponse } from './welcome.types.js';

// Initialize AppKit modules following the pattern
const logger = loggerClass.get('welcome');
const config = configClass.get();
const error = errorClass.get();

export const welcomeService = {
  /**
   * Get basic hello message
   */
  async getHello(): Promise<WelcomeResponse> {
    try {
      logger.info('Processing basic hello request');

      // Get default welcome from config (with fallback)
      const defaultWelcome = config.get('welcome.default', 'hello') as string;

      const result: WelcomeResponse = {
        message: defaultWelcome,
        timestamp: new Date().toISOString()
      };

      logger.info('Basic hello request completed', { result });
      return result;

    } catch (err) {
      logger.error('Failed to process basic hello request', { error: err });
      throw error.serverError('Failed to generate welcome message');
    }
  },

  /**
   * Get hello message with name
   */
  async getHelloWithName(name: string): Promise<PersonalizedWelcomeResponse> {
    try {
      logger.info('Processing personalized hello request', { name });

      // Validate input
      if (!name || typeof name !== 'string') {
        logger.warn('Invalid name provided', { name });
        throw error.badRequest('Name must be a valid string');
      }

      if (name.length > 100) {
        logger.warn('Name too long', { name, length: name.length });
        throw error.badRequest('Name must be less than 100 characters');
      }

      // Get welcome format from config
      const welcomeFormat = config.get('welcome.format', 'hello {name}') as string;
      const message = welcomeFormat.replace('{name}', name);

      const result = {
        message,
        name,
        timestamp: new Date().toISOString()
      };

      logger.info('Personalized hello request completed', { name, result });
      return result;

    } catch (err: any) {
      // Re-throw AppKit errors as-is
      if (err.statusCode) {
        throw err;
      }

      // Convert other errors to server errors
      logger.error('Failed to process personalized hello request', { name, error: err });
      throw error.serverError('Failed to generate personalized welcome message');
    }
  }
};