export const getAdapterTemplate = (domainName: string): string => {
  const capitalizedName = domainName.charAt(0).toUpperCase() + domainName.slice(1);
  
  return `import type { ${capitalizedName}Entity, ${capitalizedName}CreationData, ${capitalizedName}UpdateData } from '../entities/${capitalizedName}';
import type { ${capitalizedName}Port } from '../ports/${capitalizedName}Port';
import { ${capitalizedName}Error } from '../services/${capitalizedName}Service';
import { httpClient } from '../../lib/http-client';

/**
 * HTTP Adapter implementation for ${capitalizedName} domain
 */
export class ${capitalizedName}Adapter implements ${capitalizedName}Port {
  private readonly endpoint = '/${domainName}';

  async getAll(): Promise<${capitalizedName}Entity[]> {
    try {
      const response = await httpClient.get<${capitalizedName}Entity[]>(this.endpoint);
      return response.data;
    } catch (error) {
      throw new ${capitalizedName}Error('REQUEST_ERROR', \`Failed to fetch ${domainName} list\`);
    }
  }

  async getById(id: string): Promise<${capitalizedName}Entity> {
    try {
      const response = await httpClient.get<${capitalizedName}Entity>(\`\${this.endpoint}/\${id}\`);
      return response.data;
    } catch (error) {
      throw new ${capitalizedName}Error('REQUEST_ERROR', \`Failed to fetch ${domainName} with id \${id}\`);
    }
  }

  async create(data: ${capitalizedName}CreationData): Promise<${capitalizedName}Entity> {
    try {
      const response = await httpClient.post<${capitalizedName}Entity>(this.endpoint, data);
      return response.data;
    } catch (error) {
      throw new ${capitalizedName}Error('REQUEST_ERROR', \`Failed to create ${domainName}\`);
    }
  }

  async update(id: string, data: ${capitalizedName}UpdateData): Promise<${capitalizedName}Entity> {
    try {
      const response = await httpClient.put<${capitalizedName}Entity>(\`\${this.endpoint}/\${id}\`, data);
      return response.data;
    } catch (error) {
      throw new ${capitalizedName}Error('REQUEST_ERROR', \`Failed to update ${domainName} with id \${id}\`);
    }
  }

  async delete(id: string): Promise<void> {
    try {
      await httpClient.delete(\`\${this.endpoint}/\${id}\`);
    } catch (error) {
      throw new ${capitalizedName}Error('REQUEST_ERROR', \`Failed to delete ${domainName} with id \${id}\`);
    }
  }
}`;
}; 