#!/usr/bin/env ruby

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

require_relative "../lib/database"

abort "Usage: ruby bin/add-core-member EMAIL" unless ARGV.one?

email = ARGV.first.strip.downcase
abort "Adresse électronique manquante." if email.empty?

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

    raise "Statut Verified introuvable." unless verified_status_id

    account = DB[:accounts]
      .where(Sequel.function(:lower, :email) => email)
      .first

    raise "Compte introuvable : #{email}" unless account
    raise "Adresse électronique non vérifiée : #{email}" unless
      account[:status_id] == verified_status_id

    member = DB[:members].where(account_id: account[:id]).first

    raise "Fiche membre introuvable." unless member
    raise "Une personne physique est requise." unless
      member[:kind] == "individual"
    raise "Ce membre appartient déjà au Noyau." if member[:core_member]

    membership = DB[:memberships]
      .where(member_id: member[:id], status: "accepted")
      .first

    raise "Ce membre doit avoir une adhésion acceptée." unless membership

    updated = DB[:members]
      .where(id: member[:id], core_member: false)
      .update(core_member: true)

    raise "Impossible d'ajouter ce membre au Noyau." unless updated == 1
  end
rescue StandardError => e
  abort "Erreur : #{e.message}"
end

puts "#{email} a été ajouté au Noyau."
