text: const database = require('../../config/database');
  
  const dbService = (environment, migrate) => {
    const authenticateDB = () => database.authenticate();
  
    const dropDB = () => database.drop();
  
    const syncDB = () => database.sync();
  
    const successfulDBStart = () => (
      console.info('connection to the database has been established successfully')
    );
  
    const errorDBStart = (err) => (
      console.info('unable to connect to the database:', err)
    );
  
    const wrongEnvironment = () => {
      console.warn(`only development and test are valid NODE_ENV variables but ${environment} is specified`);
      return process.exit(1);
    };
  
    const startMigrateTrue = async () => {
      try {
        await syncDB();
        successfulDBStart();
      } catch (err) {
        errorDBStart(err);
      }
    };
  
    const startMigrateFalse = async () => {
      try {
        await dropDB();
        await syncDB();
        successfulDBStart();
      } catch (err) {
        errorDBStart(err);
      }
    };
  
    const startDev = async () => {
      try {
        await authenticateDB();
  
        if (migrate) {
          return startMigrateTrue();
        }
  
        return startMigrateFalse();
      } catch (err) {
        return errorDBStart(err);
      }
    };
  
    const startTest = async () => {
      try {
        await authenticateDB();
        await startMigrateFalse();
      } catch (err) {
        errorDBStart(err);
      }
    };
  
    const start = async () => {
      switch (environment) {
        case 'development':
          await startDev();
          break;
        case 'testing':
          await startTest();
          break;
        default:
          await wrongEnvironment();
      }
    };
  
    return {
      start,
    };
  };
  
  module.exports = dbService;
  