#!/usr/bin/env ruby

environment = ENV.fetch("RACK_ENV", "development")
require "dotenv/load" if environment == "development"

abort "Ce script est réservé au développement." unless
  ENV.fetch("RACK_ENV", "development") == "development"

require "io/console"
require "rodauth"

require_relative "../lib/database"

console = IO.console or abort "Terminal interactif requis."

console.print "Adresse électronique : "
email = console.gets&.strip&.downcase

abort "Adresse électronique obligatoire." if email.to_s.empty?

existing_account = DB[:accounts]
  .where(Sequel.function(:lower, :email) => email)
  .count
  .positive?

abort "Ce compte existe déjà." if existing_account

console.print "Prénom : "
first_name = console.gets&.strip

console.print "Nom : "
last_name = console.gets&.strip

abort "Prénom et nom obligatoires." if
  first_name.to_s.empty? || last_name.to_s.empty?

password = console.getpass("Mot de passe : ")
confirmation = console.getpass("Confirmer le mot de passe : ")

abort "Mot de passe obligatoire." if password.to_s.empty?
abort "Les mots de passe ne correspondent pas." unless
  password == confirmation

verified_status_id = DB[:account_statuses]
  .where(name: "Verified")
  .get(:id)

abort "Statut Verified introuvable." unless verified_status_id

console.puts
console.puts "Compte : #{first_name} #{last_name} (#{email})"
console.puts
console.print "Confirmer la création ? [o/N] "

abort "Opération annulée." unless %w[o oui].include?(
  console.gets&.strip&.downcase
)

auth = Rodauth.lib do
  db DB
  enable :create_account

  already_logged_in { super() }
end

DB.transaction do
  auth.create_account(
    login: email,
    password: password
  )

  account_id = auth.account_id_for_login(login: email)

  DB[:accounts]
    .where(id: account_id)
    .update(status_id: verified_status_id)

  DB[:members].insert(
    account_id: account_id,
    kind: "individual",
    first_name: first_name,
    last_name: last_name,
    organization_name: nil,
    core_member: false
  )
end

puts "Compte de développement créé."

