<?php

namespace security\wordpress\vulnerabilities;

class Rsssl_Folder_Name {
	public $folderName;

	private function __construct() {
		$this->initializeFolderName();
		$this->verifyAndCreateFolder();
	}

	private function initializeFolderName(): void {
		$rsssl_folder = get_option( 'rsssl_folder_name' );

		if ( $rsssl_folder ) {
			$this->folderName = $this->folderName( $rsssl_folder );
		} else {
			$newFolderName    = 'really-simple-ssl/' . md5( uniqid( mt_rand(), true ) );
			$this->folderName = $this->folderName( $newFolderName );

			require_once 'class-rsssl-file-storage.php';
			Rsssl_File_Storage::DeleteOldFiles();
			update_option( 'rsssl_folder_name', $this->folderName );
		}
	}

	private function folderName( $name ): string {
		return $name;
	}

	private function verifyAndCreateFolder(): void {
		$upload_dir = wp_upload_dir();
		if ( ! file_exists( $upload_dir['basedir'] . '/' . $this->folderName ) ) {
			$this->createFolder();
		}
	}

	public function createFolder(): void {
		$upload_dir  = wp_upload_dir();
		$folder_path = $upload_dir['basedir'] . '/' . $this->folderName;

		if ( ! file_exists( $folder_path ) && is_writable($upload_dir['basedir'] ) ) {
			if ( ! mkdir( $folder_path, 0755, true ) && ! is_dir( $folder_path ) ) {
				if ( defined( 'WP_DEBUG' ) && WP_DEBUG ) {
					error_log( sprintf( 'Really Simple SSL: Directory "%s" was not created', $folder_path ) );
				}
			}
		}
	}

	/**
	 * Creates a new folder name and saves it in the settings
	 *
	 * @return string
	 */
	public static function getFolderName(): string
	{
		return (new Rsssl_Folder_Name())->folderName;
	}
}