require('dotenv').config()
const express = require('express')
const app = express()

const fs = require('fs');
const privateKey = fs.readFileSync('./ssl/key.txt', 'utf8');
const certificate = fs.readFileSync('./ssl/crt.txt', 'utf8');
const credentials = {key: privateKey, cert: certificate};

// const server = require("http").createServer(app);
const server = require("https").createServer(credentials, app);
const cors = require('cors')
const path = require('path');
const port = 3006
const {Server} = require("socket.io");
const io = new Server(server, {
    cors: {
        origin: '*',
        // methods: ["GET", "POST"]
    }
});
const {socketServer} = require('./socket-server')
const {sequelize} = require('./models')

app.use(cors())

async function initializeDatabase() {
    try {
        await sequelize.authenticate();
        console.log('Connected to the database');
        await sequelize.sync(); // This will create tables based on your defined models
        console.log('Tables synchronized');
    } catch (error) {
        console.error('Error connecting to the database:', error);
    }
}

initializeDatabase();

const swaggerUi = require('swagger-ui-express');
const swaggerDocument = require('./swagger.json');
app.use('/api-docs', swaggerUi.serve, swaggerUi.setup(swaggerDocument));

app.use('/public', express.static('public'))
app.use('/uploads', express.static('uploads'))
// app.get('/', (req, res) => {
//     res.sendFile(path.join(__dirname, '/index.html'));
// })

socketServer(io)

app.use(express.json());

const loginRoute = require('./routes/login');
app.use(loginRoute);

const protectedRoute = require('./routes/profile');
app.use(protectedRoute);


server.listen(port, () => {
    console.log(`Example app listening on port ${port}`)
})