<?php

namespace Modules\Develop\Support\Generate;

use Catch\CatchAdmin;
use Illuminate\Support\Facades\File;
use Illuminate\Support\Str;

class Module
{
    public function __construct(
        public string $module,
        protected bool $controller,
        protected bool $models,
        protected bool $requests,
        protected bool $database
    ) {
    }

    /**
     * create
     *
     * @return void
     */
    public function create(): void
    {
        if ($this->controller) {
            CatchAdmin::getModuleControllerPath($this->module);
        }

        if ($this->models) {
            CatchAdmin::getModuleModelPath($this->module);
        }

        if ($this->requests) {
            CatchAdmin::getModuleRequestPath($this->module);
        }

        if ($this->database) {
            CatchAdmin::getModuleMigrationPath($this->module);
            CatchAdmin::getModuleSeederPath($this->module);
        }

        $this->createProvider();

        $this->createRoute();
    }


    /**
     * delete
     *
     * @return void
     */
    public function delete(): void
    {
    }

    /**
     * create provider
     *
     * @return void
     */
    protected function createProvider(): void
    {
        CatchAdmin::getModuleProviderPath($this->module);

        File::put(
            CatchAdmin::getModuleProviderPath($this->module).sprintf('%sServiceProvider.php', ucfirst($this->module)),
            Str::of(
                File::get(__DIR__.DIRECTORY_SEPARATOR.'stubs'.DIRECTORY_SEPARATOR.'provider.stub')
            )->replace(['{Module}', '{module}'], [ucfirst($this->module), $this->module])
        );
    }


    /**
     * create route
     *
     * @return void
     */
    protected function createRoute(): void
    {
        File::copy(__DIR__.DIRECTORY_SEPARATOR.'stubs'.DIRECTORY_SEPARATOR.'route.stub', CatchAdmin::getModuleRoutePath($this->module));
    }
}
