import User from '#models/user'
import { createUserValidator } from '#validators/user'
import type { HttpContext } from '@adonisjs/core/http'
import db from '@adonisjs/lucid/services/db'
import path from 'node:path'
import fs from 'fs'

export default class SecurityController {

    async login({ view }: HttpContext) { 
        return view.render('pages/login')
      }
    
    async store({ request, auth, response, session }: HttpContext) {
      const { email, password } = request.only(['email', 'password'])
      try {
        const user = await User.verifyCredentials(email, password)
        await auth.use('web').login(user)
        return response.redirect().toRoute('admin')
      } catch {
        session.flash('notification', {
          message: 'Identifiants incorrect',
          color: 'danger',
        })
        return response.redirect().toRoute('login')
      }
    }

    async logout({ response, auth }: HttpContext) {
      await auth.use('web').logout()
      return response.redirect().toRoute('home')
    }
    
    async setup({ view, response, session }: HttpContext) {
      const users = (await User.all()).length
      if(users >= 1) {
        session.flash('notification', {
          message: 'Vous avez déjà un utilisateur, veuillez vous connecté à votre compte',
          color: 'danger'
        })
        return response.redirect().toRoute('login')
      }
      const user = new User()
      return view.render('pages/setup', {
        user: user
      })
    }

    async create({ request, response, session }: HttpContext) {
      const payload = await request.validateUsing(createUserValidator)
      await User.create(payload)
      session.flash('notification', { message: 'Utilisateur ajouté', color: 'success' })

      const duosSql = fs.readFileSync(path.join('duos.sql'), 'utf8');
      await db.rawQuery(duosSql)

      const cardsSql = fs.readFileSync(path.join('cards.sql'), 'utf8');
      await db.rawQuery(cardsSql)
      
      return response.redirect().toRoute('login')
    }
}