var express = require('express');
var router = express.Router();

var options = require('./dbconfig');

//
// Postgresql
//
var Pool = require('pg').Pool;
var config = {
  user: 'matjaz',
  password: 'mesnjak',
  database: 'supervizor',
  host: 'server.dev',
  port: 5432,
  max: 10,
  idleTimeoutMillis: 30000,
};
var pool = new Pool(config);

function daysInMonth(month, year) {
  return new Date(year, month, 0).getDate();
}

/* GET home page. */
router.get('/:mesec/:sifrapu/:davcna/:id?', function (req, res, next) {
  if(!req.params.id) req.params.id = 0;
  var leto = Math.round((req.params.mesec - (req.params.mesec%12)) / 12);
  var mesec = req.params.mesec - (12 * leto)+1; //ker dobimo 0 based vrednos, rabimo pa številko meseca
  leto = leto+2003;
  console.log(leto+'-'+mesec);
  var stevec = 0;
  var vseZahteve = 11;
  
  var odgovor = { 
    title: 'Naš denar', 
    stran: req.params.id, 
    next: parseInt(req.params.id) + 1, 
    prev: parseInt(req.params.id) - 1, 
    obdobje: req.params.mesec,
    sifrapu: req.params.sifrapu, 
    davcna: req.params.davcna,
    grafEvidence: -1,
    tecajnica: -1,
    narociladelez_organ: -1,
    narociladelez_podj: -1,
    rtr: {}
  };

  pool.query('SELECT organ, ps_naziv, (extract(day FROM ujp.datum_transakcije) || \'.\' ||  extract(month FROM ujp.datum_transakcije) || \'.\' || extract(year FROM ujp.datum_transakcije)) DATUM_TR, (extract(day FROM datum_od) || \'.\' ||  extract(month FROM datum_od) || \'.\' || extract(year FROM datum_od)) DATUM_OD, (extract(day FROM datum_do) || \'.\' ||  extract(month FROM datum_do) || \'.\' || extract(year FROM datum_do)) DATUM_DO, znesek_transakcije FROM omejitve, ujp WHERE (omejitve.sifra_pu = $1 AND ujp.sifra_pu = $2) and (omejitve.ps_davcna = $3 and ujp.davcna_stevilka = $4) and (datum_od < datum_transakcije) AND (datum_transakcije < datum_do) AND (extract(year FROM datum_transakcije) >= 2014)', [req.params.sifrapu, req.params.sifrapu, req.params.davcna, req.params.davcna], function (err, krsitveomejitev) {
    if(err) {
      throw err;
    }
    odgovor.krsitveOmejitev = krsitveomejitev.rows;
    stevec++;
    console.log('1');
    if(stevec == vseZahteve) {
      res.render('razmerje', odgovor);        
    }
  })
  
  pool.query('SELECT * FROM omejitve WHERE sifra_pu = $1 and ps_davcna = $2', [req.params.sifrapu, req.params.davcna], function (err, omejitve) {
    if(err) {
      throw err;
    }
    odgovor.omejitve = omejitve.rows;
    stevec++;
    console.log('2');
    if(stevec == vseZahteve) {
      res.render('razmerje', odgovor);        
    }
  })

  pool.query('SELECT * FROM rpu WHERE sifra_pu = $1 LIMIT 1', [req.params.sifrapu], function (err, subjResult) {
    if(err) {
      throw err;
    }
    odgovor.subjekt = subjResult.rows;
    stevec++;
    console.log('3');
    if(stevec == vseZahteve) {
      res.render('razmerje', odgovor);        
    }
  })
  
  pool.query('SELECT * FROM furs WHERE zavezanec = $1', [req.params.davcna], function (err, neplacniki) {
    if(err) {
      throw err;
    }
    odgovor.neplacniki = neplacniki.rows;
    stevec++;
    console.log('4')
    if(stevec == vseZahteve) {
      res.render('razmerje', odgovor);        
    }
  })

  pool.query('SELECT sum(znesek_transakcije) STOLPIC, extract(day FROM datum_transakcije) DAN FROM ujp WHERE sifra_pu = $1 AND davcna_stevilka = $2 AND extract(month FROM datum_transakcije) = $3 AND extract(year FROM datum_transakcije) = $4 GROUP BY datum_transakcije', [req.params.sifrapu, req.params.davcna, mesec, leto], function (err, transResult) {
    if(err) {
      throw err;
    }
    var vsehDni = daysInMonth(mesec, leto);
    var stolpci = [];
    for (var i = 0; i < vsehDni; i++) {
      stolpci.push(0);
    }
    for (var j = 0; j < transResult.rows.length; j++) {
      stolpci[transResult.rows[j].dan-1] = transResult.rows[j].stolpic;
    }
    odgovor.transakcije = stolpci;
    stevec++;
    console.log('5')
    if(stevec == vseZahteve) {
      res.render('razmerje', odgovor);
    }
  })

  pool.query('SELECT kreditojemalec_naziv, kreditojemalec_sedez, davcna, posta, postna_st, kreditodajalec, st_pogodbe, znesek_eur, vrsta_posla, (extract(day FROM datum_pogodbe) || \'.\' ||  extract(month from datum_pogodbe) || \'.\' || extract(year from datum_pogodbe)) DATUM, zavarovanje_vrsta, zavarovanje_predmet FROM dutb WHERE davcna = $1 ORDER BY datum_pogodbe', [req.params.davcna], function (err, dutbResult) {
    if(err) {
      throw err;
    }
    odgovor.dutb = dutbResult.rows;
    stevec++;
    console.log('6');
    if(stevec == vseZahteve) {
      res.render('razmerje', odgovor);        
    }
  })

  pool.query('SELECT kreditodajalec, sum(znesek_eur) ZNESEK FROM dutb WHERE davcna = $1 GROUP BY KREDITODAJALEC', [req.params.davcna], function (err, dutbDelezi) {
    if(err) {
      throw err;
    }
    odgovor.dutbdelez = dutbDelezi.rows;
    stevec++;
    console.log('7')
    if(stevec == vseZahteve) {
      res.render('razmerje', odgovor);
    }
  })

  pool.query('SELECT * FROM lokacija WHERE davcna_stevilka = $1', [req.params.davcna], function (err, lokacijaZS) {
    if(err) {
      throw err;
    }
    odgovor.lokacijaZS = lokacijaZS.rows;
    stevec++;
    console.log('8')
    if(stevec == vseZahteve) {
      res.render('razmerje', odgovor);        
    }
  })

  pool.query('SELECT * FROM lokacija WHERE davcna_stevilka = (SELECT davcna FROM rpu WHERE sifra_pu = $1 LIMIT 1) LIMIT 1', [req.params.sifrapu], function (err, lokacija_JS) {
    if(err) {
      throw err;
    }
    odgovor.lokacijaJS = lokacija_JS.rows;
    stevec++;
    console.log('9')
    if(stevec == vseZahteve) {
      res.render('razmerje', odgovor);        
    }
  })

  pool.query('SELECT * FROM prs WHERE davcna = $1 LIMIT 1', [req.params.davcna], function (err, subjekt_ZS) {
    if(err) {
      throw err;
    }
    odgovor.subjektZS = subjekt_ZS.rows;
    stevec++;
    console.log('10');
    if(stevec == vseZahteve) {
      res.render('razmerje', odgovor);
    }
  })
  
  pool.query('SELECT *, (extract(day FROM datum_objave) || \'.\' || extract(month FROM datum_objave) || \'.\' || extract(year FROM datum_objave)) datum FROM narocila WHERE sifra_pu_narocnika = $1 and davcna_ponudnika = $2 ORDER BY datum_objave DESC', [req.params.sifrapu, req.params.davcna], function (err, narocila) {
	if(err) {
		throw err
	}
	odgovor.narocila = narocila.rows
	stevec++
	console.log("11")
	if(stevec == vseZahteve) {
	  res.render('razmerje', odgovor)
	}
  })
});

module.exports = router;
