#!/usr/bin/env node
/**
 * Script: Criar novo service para feature
 * Uso: node create-service.js NomeService [feature]
 * Exemplo: node create-service.js userService rh
 */

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

const [, , serviceName, feature] = process.argv;

if (!serviceName) {
  console.error('❌ Nome do service é obrigatório!');
  console.log('Uso: node create-service.js NomeService [feature]');
  process.exit(1);
}

// Normalizar nome (adicionar Service se não tiver)
const normalizedName = serviceName.endsWith('Service') 
  ? serviceName 
  : `${serviceName}Service`;

// Definir caminho
const basePath = feature 
  ? path.join(__dirname, '../../src/features', feature)
  : path.join(__dirname, '../../src/services');

const fileName = `${normalizedName}.js`;
const filePath = path.join(basePath, fileName);

// Criar pasta se não existir
if (!fs.existsSync(basePath)) {
  fs.mkdirSync(basePath, { recursive: true });
}

// Template do service
const serviceTemplate = `import api from '@/services/api';

/**
 * ${normalizedName} - Service para gerenciar dados
 */
const ${normalizedName} = {
  /**
   * Buscar lista
   * @param {Object} filters - Filtros opcionais
   * @returns {Promise<Array>}
   */
  async getList(filters = {}) {
    try {
      const response = await api.get('/endpoint', { params: filters });
      return response.data;
    } catch (error) {
      console.error('Erro ao buscar lista:', error);
      throw error;
    }
  },

  /**
   * Buscar por ID
   * @param {string|number} id - ID do registro
   * @returns {Promise<Object>}
   */
  async getById(id) {
    try {
      const response = await api.get(\`/endpoint/\${id}\`);
      return response.data;
    } catch (error) {
      console.error('Erro ao buscar item:', error);
      throw error;
    }
  },

  /**
   * Criar novo
   * @param {Object} data - Dados para criar
   * @returns {Promise<Object>}
   */
  async create(data) {
    try {
      const response = await api.post('/endpoint', data);
      return response.data;
    } catch (error) {
      console.error('Erro ao criar:', error);
      throw error;
    }
  },

  /**
   * Atualizar
   * @param {string|number} id - ID do registro
   * @param {Object} data - Dados para atualizar
   * @returns {Promise<Object>}
   */
  async update(id, data) {
    try {
      const response = await api.put(\`/endpoint/\${id}\`, data);
      return response.data;
    } catch (error) {
      console.error('Erro ao atualizar:', error);
      throw error;
    }
  },

  /**
   * Deletar
   * @param {string|number} id - ID do registro
   * @returns {Promise<void>}
   */
  async delete(id) {
    try {
      await api.delete(\`/endpoint/\${id}\`);
    } catch (error) {
      console.error('Erro ao deletar:', error);
      throw error;
    }
  },
};

export default ${normalizedName};
`;

// Escrever arquivo
fs.writeFileSync(filePath, serviceTemplate);

console.log(`✅ Service ${normalizedName} criado com sucesso!`);
console.log(`📁 Caminho: ${filePath}`);
console.log(`\n📝 Próximos passos:`);
console.log(`1. Ajustar endpoints da API`);
console.log(`2. Adicionar métodos específicos se necessário`);
console.log(`3. Importar em hooks ou views`);
