# frozen_string_literal: true

module Mutations
  module UserMutations
    class SetupTwoFactor < Mutations::BaseMutation
      argument :user_id, ID, required: true

      field :data, Types::UserType, null: true
      field :qr_code, String, null: true
      field :secret_key, String, null: true
      field :errors, [ String ], null: false
      field :message, String, null: true
      field :http_status, Integer, null: false

      def resolve(user_id:)
        user = User.find_by(id: user_id)
        unless user
          return {
            data: nil,
            qr_code: nil,
            secret_key: nil,
            errors: [ "User not found" ],
            message: "User not found",
            http_status: 404
          }
        end

        begin
          two_factor = user.two_factor || user.build_two_factor
          two_factor.generate_secret
          {
            data: user,
            qr_code: two_factor.qr_code,
            secret_key: two_factor.secret,
            errors: [],
            message: "2FA setup successful",
            http_status: 200
          }
        rescue => e
          Rails.logger.error "Error setting up 2FA for user #{user_id}: #{e.message}"
          Rails.logger.error e.backtrace.join("\n")
          {
            data: nil,
            qr_code: nil,
            secret_key: nil,
            errors: [ e.message ],
            message: "Failed to set up 2FA",
            http_status: 500
          }
        end
      end
    end
  end
end
