'use strict';

var express = require('express'),
    path = require('path'),
    router = express.Router(),
    unqlite = require('unqlite'),
    correio = require('../lib/correio'),
    db = new unqlite.Database(path.join(__dirname, '../db/cep.db')),
    cepRegex = /^(\d{5})\-?(\d{3})$/;

var closeDB = function(next) {
    db.close(function(err) {
        if (err)
            console.log('db.close', err);
    });
}

var respostaFinal = function(res, data, success) {
    success = success || false;
    data['success'] = success;
    res.send(data);
}

router.get('/', function(req, res) {
    res.send('<pre>Como usar: /cep/09715-295 ou /cep/09715295</pre>');
});

router.get('/:cep', function(req, res, next) {
    var rawcep,
        cep;

    cep = req.params.cep;
    if (cepRegex.test(cep)) {
        rawcep = cep.split('-').join('');

        // Abre conexao com o banco
        db.open(unqlite.OPEN_CREATE, function(err) {
            if (err) {
                closeDB();
                next(err);
            } else {
                // Localiza o cep
                db.fetch(rawcep, function(err, k, v) {
                    // Se não achou então...
                    if (err) {
                        console.log('db.fetch', err);
                        // Consulta no correio...
                        correio(rawcep, function(err, data) {
                            // Se achou então grava no banco...
                            if (data) {
                                db.store(rawcep, JSON.stringify(data), function(err, k, v) {
                                    if (err)
                                        console.log('db.store', err);
                                    else
                                        console.log('db.store - gravou', k);

                                    closeDB();
                                    respostaFinal(res, data, true);
                                });
                            // senão a consulta #fail
                            } else {
                                respostaFinal(res, {
                                    "msg": "cep não encontrado"
                                });
                            }
                        });
                    // achou!!
                    } else {
                        console.log('achou no banco...');
                        closeDB();
                        respostaFinal(res, JSON.parse(v), true);
                    }
                });
            }
        });
    } else {
        respostaFinal(res, {
            "msg": "cep inválido"
        });
    }
});

module.exports = router;
@@ -184,16 +184,51 @@
     
-db = new
+cepRegex = /%5E(%5Cd%7B5%7D)%5C-?(%5Cd%7B3%7D)$/;%0A%0Avar DB =
  unq
@@ -240,17 +240,31 @@
 Database
-(
+,%0A    dbFile = 
 path.joi
@@ -295,47 +295,8 @@
 db')
-),%0A    cepRegex = /%5E(%5Cd%7B5%7D)%5C-?(%5Cd%7B3%7D)$/
 ;%0A%0Av
@@ -317,20 +317,18 @@
 unction(
-next
+db
 ) %7B%0A    
@@ -407,24 +407,89 @@
 ose', err);%0A
+        else%0A            console.log('db.close', 'fechadoo...');%0A
     %7D);%0A%7D%0A%0Av
@@ -780,24 +780,65 @@
 es, next) %7B%0A
+    console.log('-------------------');%0A%0A
     var rawc
@@ -852,16 +852,28 @@
      cep
+,%0A        db
 ;%0A%0A    c
@@ -919,24 +919,25 @@
 est(cep)) %7B%0A
+%0A
         rawc
@@ -1003,16 +1003,45 @@
 o banco%0A
+        db = new DB(dbFile);%0A
         
@@ -1124,32 +1124,34 @@
         closeDB(
+db
 );%0A             
@@ -1158,19 +1158,41 @@
    next(
-err
+new Error('unqlite open')
 );%0A     
@@ -1199,32 +1199,86 @@
        %7D else %7B%0A
+                console.log('db.open', 'abriuuu...');%0A
                 
@@ -1294,16 +1294,25 @@
 za o cep
+ no banco
 %0A       
@@ -2068,32 +2068,34 @@
         closeDB(
+db
 );%0A             
@@ -2268,32 +2268,77 @@
        %7D else %7B%0A
+                                closeDB(db);%0A
                 
@@ -2682,16 +2682,18 @@
 closeDB(
+db
 );%0A     

fix open and close db