import { transform, Transformer, types as t } from 'babel-core';
import { ImportDeclaration as OrigImportDeclaration } from 'babel-core/lib/babel/transformation/transformers/es6/modules.js';
import config from './config';
import ProcessRequire from './processRequire';

export default new Transformer('yummies', {
    ImportDeclaration(node, parent, scope, file) {
        const importNodes = OrigImportDeclaration(node, parent, scope, file);

        importNodes.forEach(importNode => {
            importNode.declarations.forEach(declaration => {
                if (
                    t.isIdentifier(declaration.init.callee, { name: 'require' }) &&
                    t.isLiteral(declaration.init.arguments[0]) &&
                    declaration.init.arguments[0].value.indexOf(config.prefix) === 0
                ) {
                    const processRequire = new ProcessRequire(file.opts.filename, config);
                    const result = processRequire.process(declaration.init.arguments[0].value);

                    declaration.init.arguments[0].value = 'yummies';

                    declaration.init = t.callExpression(
                        t.memberExpression(
                            declaration.init,
                            t.identifier(result.method),
                            false
                        ),
                        [
                            t.arrayExpression(
                                result.items.map(item => {
                                    return t.objectExpression([
                                        t.property(
                                            'init',
                                            t.literal('type'),
                                            t.literal(item.type)
                                        ),
                                        t.property(
                                            'init',
                                            t.literal('module'),
                                            t.callExpression(
                                                t.identifier('require'),
                                                [ t.literal(item.path) ]
                                            )
                                        )
                                    ]);
                                })
                            )
                        ]
                    )
                }
            });
        });

        return importNodes;
    }
});

@@ -1,16 +1,14 @@
 import
- %7B
  transfo
@@ -13,108 +13,11 @@
 form
-, Transformer, types as t %7D from 'babel-core';%0Aimport %7B ImportDeclaration as OrigImportDeclaration %7D
+ers
  fro
@@ -71,26 +71,12 @@
 mers
-/es6/modules.js
 ';%0A
+%0A
 impo
@@ -154,27 +154,161 @@
 ';%0A%0A
-export default new 
+const OrigImportDeclaration = transformers%5B'es6.modules'%5D.ImportDeclaration;%0A%0Aexport default babel =%3E %7B%0A    const t = babel.types;%0A%0A    return new babel.
 Tran
@@ -328,16 +328,20 @@
 ies', %7B%0A
+    
     Impo
@@ -387,24 +387,28 @@
 ) %7B%0A        
+    
 const import
@@ -466,32 +466,36 @@
 file);%0A%0A        
+   
+ 
 importNodes.forE
@@ -510,24 +510,28 @@
 rtNode =%3E %7B%0A
+    
             
@@ -599,13 +599,21 @@
     
+    
 if (%0A
+    
     
@@ -708,24 +708,28 @@
             
+    
 t.isLiteral(
@@ -758,24 +758,28 @@
 ents%5B0%5D) &&%0A
+    
             
@@ -867,16 +867,20 @@
         
+    
 ) %7B%0A    
@@ -891,24 +891,28 @@
             
+  
+  
 const proces
@@ -970,16 +970,20 @@
 onfig);%0A
+    
         
@@ -1083,32 +1083,36 @@
                 
+ 
+   
 declaration.init
@@ -1157,32 +1157,36 @@
                 
+   
+ 
 declaration.init
@@ -1230,16 +1230,20 @@
         
+    
 t.member
@@ -1274,32 +1274,36 @@
                 
+  
+  
 declaration.init
@@ -1304,16 +1304,20 @@
 n.init,%0A
+    
         
@@ -1397,14 +1397,22 @@
     
+ 
+   
 false%0A
+    
     
@@ -1458,18 +1458,24 @@
         
-%5B%0A
+    %5B%0A  
         
@@ -1494,16 +1494,18 @@
         
+  
 t.arrayE
@@ -1507,32 +1507,36 @@
 rrayExpression(%0A
+    
                 
@@ -1610,24 +1610,28 @@
             
+    
 return t.obj
@@ -1646,16 +1646,20 @@
 ssion(%5B%0A
+    
         
@@ -1742,32 +1742,36 @@
             
+    
 'init',%0A
             
@@ -1750,32 +1750,36 @@
         'init',%0A
+    
                 
@@ -1861,32 +1861,36 @@
                 
+    
 t.literal(item.t
@@ -1926,35 +1926,43 @@
                 
+ 
-),%0A
+   ),%0A    
                 
@@ -2033,32 +2033,36 @@
                 
+    
 'init',%0A        
@@ -2089,32 +2089,36 @@
                 
+   
+ 
 t.literal('modul
@@ -2118,24 +2118,28 @@
 ('module'),%0A
+    
             
@@ -2228,32 +2228,36 @@
                 
+    
 t.identifier('re
@@ -2261,24 +2261,28 @@
 'require'),%0A
+    
             
@@ -2378,34 +2378,42 @@
                 
-)%0A
+    )%0A    
                 
@@ -2474,16 +2474,20 @@
         
+    
 %5D);%0A    
@@ -2518,11 +2518,19 @@
     
+  
+  
 %7D)%0A
+    
     
@@ -2579,18 +2579,25 @@
         
-%5D%0A
+    %5D%0A   
         
@@ -2600,34 +2600,39 @@
                 
+ 
 )%0A
+    
                 
@@ -2645,20 +2645,28 @@
         
+  
+  
 %7D);%0A
+    
         
@@ -2674,24 +2674,28 @@
 );%0A%0A        
+ 
+   
 return impor
@@ -2710,10 +2710,20 @@
     
-%7D%0A
+    %7D%0A    
 %7D);%0A
+%7D%0A

make it work with new plugins API