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

/*
 * Postgres
 */
//var pg = require('pg');
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);

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

/* GET home page. */
router.get('/getprs/:davcna', function (req, res, next) {
  if(!req.params.id) req.params.id = 0;
  pool.query('SELECT * FROM prs WHERE DAVCNA = $1 LIMIT 1', [req.params.davcna], function(err, odgovor) {
    var vrniodgovor = {};
    if(err) {
      console.log('Napaka pri poizvedbi');
    }
    vrniodgovor.MATICNA = odgovor.rows[0].ma;
    vrniodgovor.DAVCNA = odgovor.rows[0].davcna;
    vrniodgovor.POPOLNO_IME = odgovor.rows[0].popolnoime;
    vrniodgovor.OBLIKA = odgovor.rows[0].oblika;
    vrniodgovor.ORGAN = odgovor.rows[0].organ;
    vrniodgovor.POSTNA_STEVILKA = odgovor.rows[0].po;
    vrniodgovor.HISNA_STEVILKA = odgovor.rows[0].hs;
    vrniodgovor.DODATEK = odgovor.rows[0].dodatek || '';
    vrniodgovor.UPRAVNA_ENOTA = odgovor.rows[0].upravnaenota;
    vrniodgovor.REGIJA = odgovor.rows[0].regija;
    vrniodgovor.OBCINA = odgovor.rows[0].obcina;
    vrniodgovor.NASELJE = odgovor.rows[0].naselje;
    vrniodgovor.ULICA = odgovor.rows[0].ulica;
    vrniodgovor.POSTA = odgovor.rows[0].posta;
    vrniodgovor.STATUS = odgovor.rows[0].status;

    res.send(vrniodgovor);
  })  
});

router.get('/getrpu/:sifrapu', function (req, res, next) {
  if(!req.params.id) req.params.id = 0;
  var vrniodgovor = {};
  pool.query('SELECT * FROM rpu WHERE sifra_pu = $1 LIMIT 1', [req.params.sifrapu], function(err, odgovor) {
    vrniodgovor.TIP = odgovor.rows[0].tip || 'Ni podatka';
    vrniodgovor.SKUPINA = odgovor.rows[0].skupina || 'Ni podatka';
    vrniodgovor.USTANOVITELJ = odgovor.rows[0].ustanovitelj || 'Ni podatka';
    vrniodgovor.NAZIV = odgovor.rows[0].naziv || 'Ni podatka';
    vrniodgovor.PODSKUPINA = odgovor.rows[0].podskupina || 'Ni podatka';
    vrniodgovor.SIFRA_PU = odgovor.rows[0].sifra_pu || 'Ni podatka';
    vrniodgovor.MATICNA = odgovor.rows[0].maticna || 'Ni podatka';
    vrniodgovor.DAVCNA = odgovor.rows[0].davcna || 'Ni podatka';
    vrniodgovor.KRAJ = odgovor.rows[0].kraj || 'Ni podatka';
    vrniodgovor.OBCINA = odgovor.rows[0].obcina || 'Ni podatka';
    vrniodgovor.SKD = odgovor.rows[0].skd || 'Ni podatka';
    vrniodgovor.NASLOV = odgovor.rows[0].naslov || 'Ni podatka';
    vrniodgovor.POSTNA_STEVILKA = odgovor.rows[0].postna_stevilka || 'Ni podatka';
    vrniodgovor.POSTA = odgovor.rows[0].posta || 'Ni podatka';
    vrniodgovor.EZR = odgovor.rows[0].ezr || 'Ni podatka';
    vrniodgovor.SIFRA_PRORACUNA = odgovor.rows[0].sifra_proracuna || 'Ni podatka';
    res.send(vrniodgovor);
  })
});

router.get('/getlocation/:davcna', function (req, res, next) {
  if(!req.params.id) req.params.id = 0;
  var vrniodgovor = {};
  pool.query('SELECT * FROM lokacija WHERE davcna_stevilka = $1 LIMIT 1', [req.params.davcna], function(err, odgovor) {
    vrniodgovor.DAVCNA = odgovor.rows[0].davcna_stevilka.toString();
    vrniodgovor.LONGITUDE = odgovor.rows[0].longitude.toString();
    vrniodgovor.LATITUDE = odgovor.rows[0].latitude.toString();      
    res.send(vrniodgovor);
  })
});

router.get('/getdupu/organ/:sifrapu/podj/:davcna', function (req, res, next) {
  if(!req.params.id) req.params.id = 0;
  pool.query('SELECT sum(vsota_prejemkov) STOLPIC, leto, mesec FROM dupu WHERE sifra_pu = $1 AND davcna_stevilka = $2 GROUP BY leto, mesec', [req.params.sifrapu, req.params.davcna], function (err, transResult) {
    var date = new Date();
    var mesec = date.getMonth() + 1;
    var leto = date.getFullYear();
    var vsehMesecev = (leto - 2003) * 12 + mesec;
    var stolpci = [];
    for (var i = 0; i < vsehMesecev; i++) {
      stolpci.push(0);
    }
    for (var j = 0; j < transResult.rows.length; j++) {
      stolpci[((transResult.rows[j].leto - 2003) * 12 + transResult.rows[j].mesec) - 1] = transResult.rows[j].stolpic;
    }
    res.send(stolpci);
  })
});

router.get('/getsums/organ/:sifrapu/podj/:davcna', function (req, res, next) {
  if(!req.params.id) req.params.id = 0;
  pool.query('SELECT sum(vsota_prejemkov) STOLPIC, leto, mesec FROM dupu WHERE sifra_pu = $1 AND davcna_stevilka = $2 GROUP BY leto, mesec', [req.params.sifrapu, req.params.davcna], function (err, transResult) {
    var date = new Date();
    var mesec = date.getMonth() + 1;
    var leto = date.getFullYear();
    var vsehMesecev = (leto - 2003) * 12 + mesec;
    var stolpci = [];
    for (var i = 0; i < vsehMesecev; i++) {
      stolpci.push(0);
    }
    for (var j = 0; j < transResult.rows.length; j++) {
      indexStolpca = (((transResult.rows[j].leto) - 2003) * 12 + transResult.rows[j].mesec) - 1;
      stolpci[indexStolpca] = transResult.rows[j].stolpic;
    }
    res.send(stolpci);
  })
});

router.get('/getujp/organ/:sifrapu/podj/:davcna', function (req, res, next) {
  if(!req.params.id) req.params.id = 0;
  pool.query('SELECT ujp.podracun_v_breme, (extract(day FROM ujp.datum_transakcije) || \'.\' || extract(month FROM ujp.datum_transakcije) || \'.\' || extract(year FROM ujp.datum_transakcije)) DATUM, ujp.znesek_transakcije, ujp.oznaka_valute_transakcije, ujp.racun_v_dobro, ujp.kratko_ime, ujp.davcna_stevilka, ujp.davcna_stevilka, ujp.sifra_pu, ujp.identifikator, ujp.maticna_stevilka, ujp.namen, rpu.naziv NAZIV_JS, prs.popolnoime NAZIV_ZS FROM ujp LEFT JOIN rpu ON ujp.sifra_pu = rpu.sifra_pu LEFT JOIN prs ON ujp.davcna_stevilka = prs.davcna WHERE ujp.sifra_pu = $1 and ujp.davcna_stevilka = $2 ORDER BY ujp.datum_transakcije DESC;', [req.params.sifrapu, req.params.davcna], function (err, result) {
    if(err) {
      console.log('Napaka ...'+err);
    }
    var odgovor = {}
    odgovor.data = result.rows
    res.send(odgovor);
  });
});

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

router.get('/getujp/organ/:sifrapu/podj/:davcna/mesec/:mesecid', function (req, res, next) {
  if(!req.params.id) req.params.id = 0;
  var leto = Math.round((req.params.mesecid - (req.params.mesecid%12)) / 12);
  var mesec = req.params.mesecid - (12 * leto)+1; //ker dobimo 0 based vrednost, rabimo pa številko meseca
  leto = leto+2003;

  pool.query('SELECT ujp.podracun_v_breme, (extract(day FROM ujp.datum_transakcije) || \'.\' ||  extract(month FROM ujp.datum_transakcije) || \'.\' || extract(year FROM ujp.datum_transakcije)) DATUM, ujp.znesek_transakcije, ujp.oznaka_valute_transakcije, ujp.racun_v_dobro, ujp.kratko_ime, ujp.davcna_stevilka, ujp.sifra_pu, ujp.identifikator, ujp.maticna_stevilka, ujp.namen, rpu.naziv NAZIV_JS, prs.popolnoime NAZIV_ZS FROM ujp LEFT JOIN rpu ON CAST(ujp.sifra_pu AS TEXT) = rpu.sifra_pu LEFT JOIN prs ON CAST(ujp.davcna_stevilka AS TEXT) = prs.davcna WHERE ujp.sifra_pu = $1 and ujp.davcna_stevilka = $2 AND extract(month FROM datum_transakcije) = $3 AND extract(year FROM datum_transakcije) = $4 ORDER BY ujp.datum_transakcije DESC', [req.params.sifrapu, req.params.davcna, mesec, leto], function (err, result) {
    if(err) {
      console.log('Napaka ...');
    }
    var odgovor = {}
    odgovor.data = result.rows
    res.send(odgovor);
  });
});

router.get('/getdupu/podj/:davcna', function(req, res, next) {
  pool.query('SELECT dupu.sifra_pu, rpu.naziv NAZIV_JS, dupu.davcna_stevilka, prs.popolnoime NAZIV_ZS, sum(vsota_prejemkov) VSOTA_PREJEMKOV, sum(nepovratna_sredstva) NEPOVRATNA_SREDSTVA, sum(fiduciarni_posli) FIDUCIARNI_POSLI FROM dupu LEFT JOIN rpu ON dupu.sifra_pu = rpu.sifra_pu LEFT JOIN prs ON CAST(dupu.davcna_stevilka AS TEXT) = prs.davcna WHERE dupu.davcna_stevilka = $1 GROUP BY dupu.sifra_pu, dupu.davcna_stevilka, NAZIV_JS, NAZIV_ZS ORDER BY VSOTA_PREJEMKOV DESC;', [req.params.davcna], function (err, result) {
    if(err) {
      throw err;
    }
    var odgovor = {}
    odgovor.data = result.rows
    res.send(odgovor)
  });
});

router.get('/getdupu/organ/:sifrapu', function(req, res, next) {
  pool.query('SELECT dupu.sifra_pu, naziv NAZIV_JS, dupu.davcna_stevilka, prs.popolnoime NAZIV_ZS, sum(vsota_prejemkov) VSOTA_PREJEMKOV, sum(nepovratna_sredstva) NEPOVRATNA_SREDSTVA, sum(fiduciarni_posli) FIDUCIARNI_POSLI FROM dupu LEFT JOIN rpu ON dupu.sifra_pu = rpu.sifra_pu LEFT JOIN prs ON CAST(dupu.davcna_stevilka AS TEXT) = prs.davcna WHERE dupu.sifra_pu = $1 GROUP BY dupu.davcna_stevilka, dupu.sifra_pu, NAZIV_JS, NAZIV_ZS ORDER BY VSOTA_PREJEMKOV DESC;', [req.params.sifrapu], function (err, result) {
    if(err) {
      throw err;
    }
    var odgovor = {}
    odgovor.data = result.rows
    res.send(odgovor)
  });
});

router.get('/getskis/podj/:davcna', function (req, res, next) {
  pool.query('SELECT skis.skis, skis_sifrant.deskriptor_si FROM skis LEFT JOIN skis_sifrant ON skis.skis = skis_sifrant.skis WHERE maticna = (SELECT prs.ma FROM prs WHERE prs.davcna = $1 LIMIT 1) LIMIT 1', [req.params.davcna], function (err, skis) {
  if(err) {
    throw err;
  }
  res.send(skis.rows)
  });
});

router.get('/getskis/organ/:sifra_pu', function (req, res, next) {
  pool.query('SELECT skis.skis, skis_sifrant.deskriptor_si FROM skis LEFT JOIN skis_sifrant ON skis.skis = skis_sifrant.skis WHERE maticna = (SELECT rpu.maticna FROM rpu WHERE rpu.şifra_pu = $1 LIMIT 1) LIMIT 1', [req.params.sifra_pu], function (err, skis) {
  if(err){
    throw err;
  }
  res.send(skis.rows)
  });
});

router.get('/priljubljenaPodj/:davcne', function (req, res, next) {
  var davcneStevilke = req.params.davcne
  davcneStevilke = ("'"+davcneStevilke.toString().replace(/,/g, "','")+"'").replace(/[^\d,\']/g, '')
  poizvedba = 'SELECT popolnoime, davcna from prs where davcna in ('+davcneStevilke+') order by davcna asc;'
  console.log(poizvedba)
  pool.query(poizvedba, function (err, result) {
    if(err) {
      throw err;
    }
    var odgovor = {}
    odgovor.data = result.rows;
    res.send(odgovor)
    console.log(result.rows[0])
  })
})

router.get('/priljubljenaPodjSums/:davcne', function (req, res, next) {
  var davcneStevilke = req.params.davcne
  davcneStevilke = ("'"+davcneStevilke.toString().replace(/,/g, "','")+"'").replace(/[^\d,\']/g, '')

  poizvedba = 'SELECT davcna_stevilka, sum(vsota_prejemkov) STOLPIC, leto, mesec FROM dupu WHERE davcna_stevilka in ('+davcneStevilke+') GROUP BY davcna_stevilka, leto, mesec;'
  poizvedbaImenaPodjetja = 'SELECT davcna, popolnoime FROM prs WHERE davcna IN ('+davcneStevilke+') ORDER BY davcna ASC;'
  console.log(poizvedba)
  console.log(poizvedbaImenaPodjetja)
  pool.query(poizvedba, function (err, transResult) {
    if(err) {
      throw err;
    }
    //console.log(transResult.rows)
    var date = new Date();
    var mesec = date.getMonth() + 1;
    var leto = date.getFullYear();
    var vsehMesecev = (leto - 2003) * 12 + mesec;
    
    var davcne = davcneStevilke.split(',')
    //davcne.sort('asc');
    var rezultati = []
    var imena = []
    for (var k = 0; k < davcne.length; k++) {
      var stolpci = [];
      for (var i = 0; i < vsehMesecev; i++) {
        stolpci.push(0);
      }
      for (var j = 0; j < transResult.rows.length; j++) {
        if(transResult.rows[j].davcna_stevilka.toString().replace(/'/g, '').replace(/"/g, '') == davcne[k].toString().replace(/'/g, '').replace(/"/g, '')) {
          stolpci[(transResult.rows[j].leto - 2003) * 12 + transResult.rows[j].mesec-1] = transResult.rows[j].stolpic;
        }        
      }
      rezultati.push(stolpci);
    }
    var odgovor = {}
    odgovor.data = rezultati;
    odgovor.seti = davcne.length;
    odgovor.davcne = davcne;
    pool.query(poizvedbaImenaPodjetja, function(err, imena) {
      if(err) {
        throw err;
      }
      odgovor.imena = imena.rows
      res.send(odgovor)
    })
    
  })
})

router.get('/priljubljeniOrgani/:sifrepu', function (req, res, next) {
  var sifrePU = req.params.sifrepu
  sifrePU = ("'"+sifrePU.toString().replace(/,/g, "','")+"'").replace(/[^\d,\']/g, '')
  poizvedba = 'SELECT naziv, sifra_pu from rpu where sifra_pu in ('+sifrePU+') order by sifra_pu asc;'
  console.log(poizvedba)
  pool.query(poizvedba, function (err, result) {
    if(err) {
      throw err;
    }
    var odgovor = {}
    odgovor.data = result.rows;
    res.send(odgovor)
    console.log(result.rows[0])
  })
})

router.get('/priljubljeniOrganiSums/:sifrepu', function (req, res, next) {
  var sifrePU = req.params.sifrepu
  sifrePU = ("'"+sifrePU.toString().replace(/,/g, "','")+"'").replace(/[^\d,\']/g, '')
  console.log('sifrePU: '+sifrePU)

  poizvedba = 'SELECT sifra_pu, sum(vsota_prejemkov) STOLPIC, leto, mesec FROM dupu WHERE sifra_pu in ('+sifrePU+') GROUP BY sifra_pu, leto, mesec;'
  poizvedbaImena = 'SELECT sifra_pu, naziv FROM rpu WHERE sifra_pu IN ('+sifrePU+') ORDER BY sifra_pu ASC;'
  console.log(poizvedba)
  pool.query(poizvedba, function (err, transResult) {
    if(err) {
      throw err;
    }
    //console.log(transResult.rows)
    var date = new Date();
    var mesec = date.getMonth() + 1;
    var leto = date.getFullYear();
    var vsehMesecev = (leto - 2003) * 12 + mesec;
     
    var sifre = sifrePU.split(',')
    //sifre.sort('asc');
    var rezultati = []
    var imena = []
    for (var k = 0; k < sifre.length; k++) {
      var stolpci = [];
      for (var i = 0; i < vsehMesecev; i++) {
        stolpci.push(0);
      }
      for (var j = 0; j < transResult.rows.length; j++) {
        if(transResult.rows[j].sifra_pu.toString().replace(/'/g, '').replace(/"/g, '') == sifre[k].toString().replace(/'/g, '').replace(/"/g, '')) {
          stolpci[(transResult.rows[j].leto - 2003) * 12 + transResult.rows[j].mesec-1] = transResult.rows[j].stolpic;
        }        
      }
      rezultati.push(stolpci);
    }
    var odgovor1 = {}
    odgovor1.data = rezultati;
    odgovor1.seti = sifre.length;
    odgovor1.sifrepu = sifre;
    pool.query(poizvedbaImena, function(err, imena) {
      if(err) {
        throw err;
      }
      odgovor1.imena = imena.rows
      res.send(odgovor1)
    })
    
  })
})

router.get('/statistike/prsporegijah', function (req, res, next) {
  pool.query('select count(*) stevilo, regija from prs where status = \'aktivno\' group by regija order by 1 desc;', function (err, result) {
    if(err) {
      throw err;
    }
    var odgovor = {}
    odgovor.data = result.rows;
    res.send(odgovor)
    console.log(result.rows[0])
  })
})

router.get('/statistike/prsporegijahgraf', function (req, res, next) {
  pool.query('select count(*) stevilo from prs where status = \'aktivno\' and regija is not null group by regija order by regija asc;', function (err, result) {
    if(err) {
      throw err;
    }
    var odgovor = []
    for(var i = 0; i < result.rows.length; i++) {
      odgovor.push(result.rows[i].stevilo)
    }
    res.send(odgovor)
    console.log(result.rows[0])
  })
})

router.get('/statistike/ljseindex', function (req, res, next) {
  pool.query('select (extract(day from datum) || \'.\' || extract(month from datum) || \'.\' || extract(year from datum)) moj_datum, cast(value as text) from ljse_index where datum is not null and value is not null order by datum asc limit 300;', function (err, result) {
    if(err) {
      throw err;
    }
    var odgovor = {
      datumi: [],
      vrednosti: []
    }
    for(var i = 0; i < result.rows.length; i++) {
      odgovor.datumi.push(result.rows[i].moj_datum)
      odgovor.vrednosti.push(result.rows[i].value)
    }
    res.send(odgovor)
    console.log(result.rows[0])
  })
})

router.get('/priljubljenaPodjSestevki/:davcne', function (req, res, next) {
  var davcneStevilke = req.params.davcne
  davcneStevilke = ("'"+davcneStevilke.toString().replace(/,/g, "','")+"'").replace(/[^\d,\']/g, '')
  poizvedba = 'select davcna_stevilka, sum(vsota_prejemkov) vsota, popolnoime from dupu left join prs on cast(davcna_stevilka as varchar) = davcna where davcna_stevilka in ('+davcneStevilke+') group by davcna_stevilka, popolnoime;'
  console.log(poizvedba)
  pool.query(poizvedba, function (err, result) {
    if(err) {
      throw err;
    }
    var odgovor = {
      podjetje: [],
      znesek: [],
      davcna: []
    }
    for(var i = 0; i < result.rows.length; i++) {
      odgovor.podjetje.push(result.rows[i].popolnoime)
      odgovor.znesek.push(result.rows[i].vsota)
      odgovor.davcna.push(result.rows[i].davcna_stevilka)
    }
    res.send(odgovor)
    console.log(result.rows[0])
  })
})

router.get('/priljubljeniOrganiSestevki/:sifrepu', function (req, res, next) {
  var sifrePU = req.params.sifrepu
  sifrePU = ("'"+sifrePU.toString().replace(/,/g, "','")+"'").replace(/[^\d,\']/g, '')
  poizvedba = 'select dupu.sifra_pu, sum(vsota_prejemkov) vsota, naziv from dupu left join rpu on cast(dupu.sifra_pu as varchar) = rpu.sifra_pu where dupu.sifra_pu in ('+sifrePU+') group by dupu.sifra_pu, naziv;'
  console.log(poizvedba)
  pool.query(poizvedba, function (err, result) {
    if(err) {
      throw err;
    }
    var odgovor = {
      organ: [],
      znesek: [],
      sifrapu: []
    }
    for(var i = 0; i < result.rows.length; i++) {
      odgovor.organ.push(result.rows[i].naziv)
      odgovor.znesek.push(result.rows[i].vsota)
      odgovor.sifrapu.push(result.rows[i].sifra_pu)
    }
    res.send(odgovor)
    console.log(result.rows[0])
  })
})

router.get('/delnice/:davcna', function(req, res, next) {
  pool.query('SELECT * FROM delnice WHERE davcna = $1', [req.params.davcna], function(err, result) {
    if(err) {
      throw(err)
    }
    if(typeof(result.rows) != 'undefined') {
      res.send(result.rows[0])
    }
  })
})

module.exports = router;
