const http = require('http');
const fs = require('fs');
const url = require('url');
const path = require('path');
var qs = require('querystring');
//var search = require('use-url-search-params');
//const { dirname } = require('path/posix');


let sayfalar = ["Giris", "Kayitol", "Anasayfa","Hakkımızda","İletişim","İlangiris"];
let sayfa_isim;


const sql = require('mssql/msnodesqlv8');
var config = {
    server: 'DESKTOP-8REGQUV',
    database: 'Buldum_Data',
    user: 'sa',
    password: '12345',
    options: {
        trustServerCertificate: true, // bunları girmezsek lisans hatası veriyor
        trustedConnection: true 	/// girdiğimiz kaynağın güvenilir olduğunu belirtiyoruz		
    }
};

let islogin = false;
let user = '';
const server = http.createServer(async (req, res) => {
    for (let sayfa_iter = 0; sayfa_iter < sayfalar.length; sayfa_iter++) {
        if ("/" + sayfalar[sayfa_iter] == url.parse(req.url).pathname) {
            sayfa_isim = "/" + sayfalar[sayfa_iter];
        }
    }

    /////////////////////////////////////////////////////////////
    if (url.parse(req.url).pathname == '/Giris' && req.method == "POST") {
        (async () => {
            console.log("#### Bağlantı Sağlandı 123 ####");
            try {
                var body = '';
                var post = '';

                req.on('data', function (data) {
                    body += data;

                    if (body.length > 1e6)
                        request.connection.destroy();
                });

                req.on('end', function () {
                    post = qs.parse(body);
                    console.log(post.username)
                    console.log(post.password)

                    user = post.username;
                });

                const conn = await sql.connect(config);
                var result = await conn.request()
                    .input('username', sql.NVarChar(50), post.username)
                    .input('sifre', sql.NVarChar(50), post.password)
                    .output('state', sql.NVarChar(50))
                    .query("EXEC kullanici_giris @username,@sifre,@state output ");


                conn.close();
                if (result.output.state == 'TRUE') {
                    console.log(result.output.state);
                    islogin = true;
                    /*
                    
                    
                    
                    
                    
                    */ if (islogin == true) {
                        (async () => {
                            console.log("#### Bağlantı Sağlandı 123 ####");
                            try {
                             
                              
                                let yeni_dizi = []
                                let gelen_data1 = ''
                                let dizi_uzunluk;
                                function getStudent() {
                                    let dizi_iteri = 0;



                                    sql.on('error', err => {
                                        // ... error handler 
                                        console.log("DB Error2: " + err);
                                    })


                                    return sql.connect(config).then(pool => {
                                        // Query 
                                        return pool.request()
                                            .query('select *from yorumlar')
                                    }).then(function (result) {
                                        dizi_uzunluk = result.recordset.length;
                                        for (let iter = 0; iter < result.recordset.length; iter++) {

                                            if (iter == result.recordset.length - 1) {

                                                yeni_dizi[dizi_iteri] = result.recordset[iter].yorum_yapan_username

                                                gelen_data1 = gelen_data1 + result.recordset[iter].yorum_yapan_username + ","
                                                dizi_iteri++
                                                yeni_dizi[dizi_iteri] = result.recordset[iter].yorum_zaman
                                                gelen_data1 = gelen_data1 + result.recordset[iter].yorum_zaman + ","
                                                dizi_iteri++
                                                yeni_dizi[dizi_iteri] = result.recordset[iter].yorum_baslik
                                                gelen_data1 = gelen_data1 + result.recordset[iter].yorum_baslik + ","
                                                dizi_iteri++
                                                yeni_dizi[dizi_iteri] = result.recordset[iter].yorum
                                                gelen_data1 = gelen_data1 + result.recordset[iter].yorum + ","
                                                dizi_iteri++
                                            } else {
                                                yeni_dizi[dizi_iteri] = result.recordset[iter].yorum_yapan_username

                                                gelen_data1 = gelen_data1 + result.recordset[iter].yorum_yapan_username + ","
                                                dizi_iteri++
                                                yeni_dizi[dizi_iteri] = result.recordset[iter].yorum_zaman
                                                gelen_data1 = gelen_data1 + result.recordset[iter].yorum_zaman + ","
                                                dizi_iteri++
                                                yeni_dizi[dizi_iteri] = result.recordset[iter].yorum_baslik
                                                gelen_data1 = gelen_data1 + result.recordset[iter].yorum_baslik + ","
                                                dizi_iteri++
                                                yeni_dizi[dizi_iteri] = result.recordset[iter].yorum
                                                gelen_data1 = gelen_data1 + result.recordset[iter].yorum + ","
                                                dizi_iteri++
                                            }

                                        }

                                        // console.log(gelen_data1)

                                        sql.close();
                                        return result;
                                    })
                                        .catch(err => {
                                            // ... error checks 
                                            console.log("DB Error1: " + err);
                                            sql.close();
                                            throw err;
                                        })

                                }
                                await getStudent()


                                let yorum_sayfasi = `


                                `

                                res.end(yorum_sayfasi)


                            } catch (e) {
                                console.log("#### Hata Yakalandı !! ####");
                                console.log(e);
                            }
                        })()

                    }
                } else if (result.output.state == 'FALSE') {
                    res.end(`<html> <meta charset="UTF-8"><script> alert("Veritabanında Girilen Bilgiler İle Uyuşan Kayıt YOKTUR"); function git(){ window.location.href='/login'}  git()</script></html>`)
                    islogin = false;
                }
            } catch (e) {
                console.log("#### Hata Yakalandı !! ####");
                console.log(e);
            }
            console.log("#### Bağlantı Sonlandı ####");
        })()

    } else if (url.parse(req.url).pathname == '/mainpage') {
        if (islogin == true) {
            (async () => {
                console.log("#### Bağlantı Sağlandı 123 ####");
                try {
                    var url_parts = url.parse(req.url, true);
                    var query = url_parts.query;
                   
                    let yeni_dizi = []
                    let gelen_data1 = ''
                    let dizi_uzunluk;
                    function getStudent() {
                        let dizi_iteri = 0;
                        sql.on('error', err => {
                            // ... error handler 
                            console.log("DB Error2: " + err);
                        })


                        return sql.connect(config).then(pool => {
                            // Query 
                            return pool.request()
                                .query('select *from yorumlar')
                        }).then(function (result) {
                            dizi_uzunluk = result.recordset.length;
                            for (let iter = 0; iter < result.recordset.length; iter++) {

                                if (iter == result.recordset.length - 1) {

                                    yeni_dizi[dizi_iteri] = result.recordset[iter].yorum_yapan_username
                                    gelen_data1 = gelen_data1 + result.recordset[iter].yorum_yapan_username + ","
                                    dizi_iteri++
                                    yeni_dizi[dizi_iteri] = result.recordset[iter].yorum_zaman
                                    gelen_data1 = gelen_data1 + result.recordset[iter].yorum_zaman + ","
                                    dizi_iteri++
                                    yeni_dizi[dizi_iteri] = result.recordset[iter].yorum_baslik
                                    gelen_data1 = gelen_data1 + result.recordset[iter].yorum_baslik + ","
                                    dizi_iteri++
                                    yeni_dizi[dizi_iteri] = result.recordset[iter].yorum
                                    gelen_data1 = gelen_data1 + result.recordset[iter].yorum + ","
                                    dizi_iteri++
                                } else {
                                    yeni_dizi[dizi_iteri] = result.recordset[iter].yorum_yapan_username
                                    gelen_data1 = gelen_data1 + result.recordset[iter].yorum_yapan_username + ","
                                    dizi_iteri++
                                    yeni_dizi[dizi_iteri] = result.recordset[iter].yorum_zaman
                                    gelen_data1 = gelen_data1 + result.recordset[iter].yorum_zaman + ","
                                    dizi_iteri++
                                    yeni_dizi[dizi_iteri] = result.recordset[iter].yorum_baslik
                                    gelen_data1 = gelen_data1 + result.recordset[iter].yorum_baslik + ","
                                    dizi_iteri++
                                    yeni_dizi[dizi_iteri] = result.recordset[iter].yorum
                                    gelen_data1 = gelen_data1 + result.recordset[iter].yorum + ","
                                    dizi_iteri++
                                }

                            }

                            //console.log(yeni_dizi)

                            sql.close();
                            return result;
                        })
                            .catch(err => {
                                // ... error checks 
                                console.log("DB Error1: " + err);
                                sql.close();
                                throw err;
                            })

                    }
                    await getStudent()

                    let yorum_sayfasi = `
      
                     `

                    res.end(yorum_sayfasi)


                } catch (e) {
                    console.log("#### Hata Yakalandı !! ####");
                    console.log(e);
                }
            })()
        }
        else
            res.end(`<html> <meta charset="UTF-8"><script> alert("ilk önce giriş yapmalısınız"); function git(){ window.location.href='/login'}  git()</script></html>`)
    } else if (url.parse(req.url).pathname == '/login') {
        if (req.method == 'POST') {

        } else {
            islogin = false;
            sayfa_yukle(req, res)
        }
    } else if (url.parse(req.url).pathname == '/kaydet') {
        
        var url_parts = url.parse(req.url, true);
        var query = url_parts.query;
                console.log("burası veri kaydetme yeri")
        
                
                

                const conn = await sql.connect(config);
                var result = await conn.request()
                    .input('username', sql.NVarChar(50), user)
                    .input('title', sql.NVarChar(50), query.content_title)
                    .input('content', sql.NVarChar(50),query.content)
                    .query("EXEC yorum_kaydet @username,@title,@content ");

           
                res.end('<script>function yonel(){window.location.href="/mainpage"   } yonel()</script>')
            
        } else {
            sayfa_yukle(req, res)
        }
    


});


function sayfa_yukle(req, res) {
    var pathname = url.parse(req.url).pathname;
    if (pathname == sayfa_isim) {
        fs.readFile("../pages" + pathname + ".html", "UTF-8", function (err, html) {
            res.writeHead(200, { "Content-Type": "text/html" });
            res.end(html);
        });
    } else if (pathname.match("\.css$")) {
        var cssPath = path.join(__dirname, "..", pathname);
        var fileStream = fs.createReadStream(cssPath, "UTF-8");
        res.writeHead(200, { "Content-Type": "text/css" });
        fileStream.pipe(res);
    } else if (pathname.match("\.png$")) {

        var imagePath = path.join(__dirname, "..", pathname);
        var fileStream = fs.createReadStream(imagePath);
        res.writeHead(200, { "Content-Type": "image/png" });
        fileStream.pipe(res);
    } else if (pathname.match("\.jpg$")) {

        var imagePath = path.join(__dirname, "..", pathname);
        var fileStream = fs.createReadStream(imagePath);
        res.writeHead(200, { "Content-Type": "image/jpg" });
        fileStream.pipe(res);
    } else if (pathname.match("\.mp4$")) {
        var videoPath = path.join(__dirname, "..", pathname);
        var fileStream = fs.createReadStream(videoPath);
        res.writeHead(200, { "Content-Type": "video/mp4" });
        fileStream.pipe(res);
    } else if (pathname.match("\.js$")) {
        var videoPath = path.join(__dirname, "..", pathname);
        var fileStream = fs.createReadStream(videoPath);
        res.writeHead(200, { "Content-Type": "text/javascript" });
        fileStream.pipe(res);
    } else {
        res.writeHead(404, { "Content-Type": "text/html" });
        res.end("NOT FOUND");
    }
}


server.listen(8080, (err) => {
    if (err)
        throw err;
    else
        console.log('Server Çalıştı');
});

