const express = require("express");
const mysql = require("mysql2");
const bodyParser = require("body-parser");
var cors = require("cors");
const app = express();
const port = process.env.PORT || 8084;
const fs = require("fs");
app.use(cors());

app.use(bodyParser.json({ limit: "50mb" }));
app.use(bodyParser.urlencoded({ limit: "50mb", extended: true }));
app.use(express.json());

let db;
const createdbConnection = () => {
    db = mysql.createConnection({
        host: "localhost",
        user: "familpps_ashish",
        password: "Ashish@123",
        database: "familpps_inforce"
        // host: "localhost",
        // user: "root",
        // password: "",
        // database: "inforce",
    });
};
// createdbConnection();
// db.connect((err) => {
//     if (err) {
//         throw err;
//     } else {
//         console.log("connected to db");

//         // const createTableQuery = `
//         //     CREATE TABLE IF NOT EXISTS user_data (
//         //         id INT AUTO_INCREMENT PRIMARY KEY,
//         //         name VARCHAR(255),
//         //         size  VARCHAR(255),
//         //         canvasuri TEXT
//         //     )
//         // `;
//         // db.query(createTableQuery, (error, results, fields) => {
//         //     if (error) {
//         //         throw error;
//         //     }
//         //     console.log("Table created successfully");
//         // });

//         // const data = [
//         //     { name: "John", age: 25 },
//         //     { name: "Jane", age: 30 },
//         //     { name: "Bob", age: 35 },
//         // ];

//         // const query = "INSERT INTO your_table (name, age) VALUES ?";
//         // const values = data.map(({ name, age }) => [name, age]);
//         const createTableQuery = `
//         CREATE TABLE IF NOT EXISTS avl_size (
//             id INT AUTO_INCREMENT PRIMARY KEY,
//             size VARCHAR(255),
//             is_active  BOOLEAN
//         )
//     `;
//         // Insert three rows
//         const insertRowsQuery = `
//             INSERT INTO avl_size (size, is_active)    VALUES         ('AS', true),
//             ('AM', true),
//             ('AL', true)
//             `;

//         db.query(createTableQuery, (error) => {
//             if (error) {
//                 throw error;
//             }
//             db.query(insertRowsQuery, (error) => {
//                 if (error) {
//                     throw error;
//                 }
//                 console.log("Table created successfully");
//             });
//         });
//     }
// });

// db.on("error", (err) => console.log(err));

app.post("/api/save", (req, res) => {
    createdbConnection();
    db.connect((errdb) => {
        if (errdb) {
            throw errdb;
        } else {
            const data = req.body;
            const { canvasuri, name } = data;
            const filePath = __dirname + `/canvas/${name + Date.now()}.png`;

            // Remove the header from the dataUrl
            const base64Data = canvasuri.replace(
                /^data:image\/png;base64,/,
                ""
            );
            fs.writeFile(filePath, base64Data, "base64", (err) => {
                if (err) {
                    console.error(err);
                    res.sendStatus(500);
                } else {
                    console.log("connected to db");
                    const sql = `INSERT INTO user_data (name, size, canvasuri) VALUES (?, ?, ?)`;

                    var respath = filePath.replace(
                        "/home/familpps/public_html",
                        "https://familyindustriesapps.com"
                    );
                    const values = [data.name, data.size, respath];

                    db.query(sql, values, (err, result) => {
                        if (err) {
                            throw err;
                        }
                        // console.log('Data inserted:', result);
                    });
                    db.end();
                    res.send("Entry updated");
                }
            });
        }
    });
});

app.get("/api/fetchdb", (req, res) => {
    createdbConnection();
    db.connect((err) => {
        if (err) {
            throw err;
        } else {
            console.log("fetching from db");
            const query = "SELECT * FROM user_data";

            db.query(query, (err, result) => {
                if (err) {
                    throw err;
                } else {
                    res.status(200).json(result);
                }
            });
            db.end();
        }
    });
});
app.get("/api/fetchsizes", (req, res) => {
    createdbConnection();
    db.connect((err) => {
        if (err) {
            throw err;
        } else {
            console.log("fetching from db");
            const query = "SELECT * FROM avl_size";

            db.query(query, (err, result) => {
                if (err) {
                    throw err;
                } else {
                    res.status(200).json(result);
                }
            });
            db.end();
        }
    });
});


app.put("/api/updatesizes", (req, res) => {
    const { as, am,al } = req.body;

    console.log(as,am,al);
    createdbConnection();
    db.connect((errdb) => {
        if (errdb) {
            throw errdb;
        } else {
            const updateRowsQuery = `
            UPDATE avl_size
            SET is_active = CASE
              WHEN id = 1 THEN ${as}
              WHEN id = 2 THEN ${am}
              WHEN id = 3 THEN ${al}
              ELSE is_active
            END
            WHERE id IN (1, 2, 3)
          `;
            db.query(updateRowsQuery, (err, result) => {
                if (err) {
                    throw err;
                } else {
                    res.send("Status updated successfully");
                    db.end();
                }
            });
        }
    });
});


app.get("/", (req, res) => {
    res.send("Hey, its inforce");
});

app.listen(port, () => {
    console.log(`Server listening on port ${port}`);
});
