<?php

namespace QUI\ERP\Coupons;

use QUI;
use QUI\Utils\System\File;

/**
 * Class CodeGenerator
 *
 * Generated unique, random Invite Codes
 */
class CodeGenerator
{
    /**
     * Generate a new, random Invite Code
     *
     * @return string
     * @throws \QUI\Exception
     */
    public static function generate()
    {
        $generator = '\\QUI\\ERP\\Coupons\\CodeGenerators\\'.self::getCurrentGenerator();

        $Config = QUI::getPackage('quiqqer/coupons')->getConfig();
        $prefix = $Config->get('settings', 'prefix');

        if (empty($prefix)) {
            $prefix = '';
        }

        return \call_user_func($generator.'::generate', $prefix);
    }

    /**
     * Get CodeGenerator that is currently set
     *
     * @return string - FQ class name
     * @throws \QUI\Exception
     */
    protected static function getCurrentGenerator()
    {
        $Config           = QUI::getPackage('quiqqer/coupons')->getConfig();
        $currentGenerator = $Config->get('settings', 'codeGenerator');

        if (empty($currentGenerator)) {
            return 'SimpleString';
        }

        return $currentGenerator;
    }

    /**
     * Get list of all available CodeGenerators
     *
     * @return array
     * @throws \QUI\Exception
     */
    public static function getList()
    {
        $dir        = QUI::getPackage('quiqqer/coupons')->getDir().'src/QUI/ERP/Coupons/CodeGenerators';
        $generators = [];

        foreach (File::readDir($dir, true) as $file) {
            $generators[] = \basename($file, '.php');
        }

        return $generators;
    }
}