<?php

namespace Simply_Static;

class Migrate_Settings {
	/**
	 * Migrate settings
	 *
	 */
	public static function migrate() {
		$options = get_option( 'simply-static' );
		$options = is_array( $options ) ? $options : array();

		if ( isset( $options['debugging_mode'] ) && $options['debugging_mode'] == '1' ) {
			$options['debugging_mode'] = true;
		} else {
			$options['debugging_mode'] = false;
		}

		if ( isset( $options['force_replace_url'] ) && $options['force_replace_url'] == 'on' ) {
			$options['force_replace_url'] = true;
		} else {
			$options['force_replace_url'] = false;
		}

		if ( isset( $options['clear_directory_before_export'] ) && $options['clear_directory_before_export'] == 'on' ) {
			$options['clear_directory_before_export'] = true;
		} else {
			$options['clear_directory_before_export'] = false;
		}

		if ( isset( $options['http_basic_auth_digest'] ) && $options['http_basic_auth_digest'] ) {
			$decoded   = base64_decode( (string) $options['http_basic_auth_digest'], true );
			$separator = is_string( $decoded ) ? strpos( $decoded, ':' ) : false;
			if ( false !== $separator ) {
				$options['http_basic_auth_username'] = substr( $decoded, 0, $separator );
				// Passwords may legitimately contain additional colons.
				$options['http_basic_auth_password'] = substr( $decoded, $separator + 1 );
			}
		}
		unset( $options['http_basic_auth_digest'] );

		if ( isset( $options['urls_to_exclude'] ) ) {
			if ( is_array( $options['urls_to_exclude'] ) ) {
				$urls_to_exclude = [];

				foreach ( $options['urls_to_exclude'] as $url => $data ) {
					$urls_to_exclude[] = $url;
				}

				$options['urls_to_exclude'] = implode( "\n", $urls_to_exclude );
			} elseif ( is_scalar( $options['urls_to_exclude'] ) ) {
				$options['urls_to_exclude'] = sanitize_textarea_field( (string) $options['urls_to_exclude'] );
			} else {
				$options['urls_to_exclude'] = '';
			}
		}

		// Migrate options to always underscore instead of dash.
		if ( isset( $options['deployment-provider'] ) ) {
			unset( $options['deployment-provider'] );
		}

		if ( isset( $options['tiiny-email'] ) ) {
			$options['tiiny_email'] = $options['tiiny-email'];
			unset( $options['tiiny-email'] );
		}

		if ( isset( $options['tiiny-subdomain'] ) ) {
			$options['tiiny_subdomain'] = $options['tiiny-subdomain'];
			unset( $options['tiiny-subdomain'] );
		}

		if ( isset( $options['tiiny-domain-suffix'] ) ) {
			$options['tiiny_domain_suffix'] = $options['tiiny-domain-suffix'];
			unset( $options['tiiny-domain-suffix'] );
		}

		if ( isset( $options['tiiny-password'] ) ) {
			$options['tiiny_password'] = $options['tiiny-password'];
			unset( $options['tiiny-password'] );
		}

		if ( isset( $options['cdn-api-key'] ) ) {
			$options['cdn_api_key'] = $options['cdn-api-key'];
			unset( $options['cdn-api-key'] );
		}

		if ( isset( $options['cdn-storage-host'] ) ) {
			$options['cdn_storage_host'] = $options['cdn-storage-host'];
			unset( $options['cdn-storage-host'] );
		}

		if ( isset( $options['cdn-access-key'] ) ) {
			$options['cdn_access_key'] = $options['cdn-access-key'];
			unset( $options['cdn-access-key'] );
		}

		if ( isset( $options['cdn-pull-zone'] ) ) {
			$options['cdn_pull_zone'] = $options['cdn-pull-zone'];
			unset( $options['cdn-pull-zone'] );
		}

		if ( isset( $options['cdn-storage-zone'] ) ) {
			$options['cdn_storage_zone'] = $options['cdn-storage-zone'];
			unset( $options['cdn-storage-zone'] );
		}

		if ( isset( $options['cdn-directory'] ) ) {
			$options['cdn_directory'] = $options['cdn-directory'];
			unset( $options['cdn-directory'] );
		}

		if ( isset( $options['github-account-type'] ) ) {
			$options['github_account_type'] = $options['github-account-type'];
			unset( $options['github-account-type'] );
		}

		if ( isset( $options['github-user'] ) ) {
			$options['github_user'] = $options['github-user'];
			unset( $options['github-user'] );
		}

		if ( isset( $options['github-email'] ) ) {
			$options['github_email'] = $options['github-email'];
			unset( $options['github-email'] );
		}

		if ( isset( $options['github-personal-access-token'] ) ) {
			$options['github_personal_access_token'] = $options['github-personal-access-token'];
			unset( $options['github-personal-access-token'] );
		}

		if ( isset( $options['github-repository'] ) ) {
			$options['github_repository'] = $options['github-repository'];
			unset( $options['github-repository'] );
		}

		if ( isset( $options['github-existing-repository'] ) && $options['github-existing-repository'] === 'yes' ) {
			$options['github_existing_repository'] = true;
			unset( $options['github-existing-repository'] );
		} else {
			$options['github_existing_repository'] = false;
			unset( $options['github-existing-repository'] );
		}

		if ( isset( $options['github-repository-visibility'] ) ) {
			$options['github_repository_visibility'] = $options['github-repository-visibility'];
			unset( $options['github-repository-visibility'] );
		}

		if ( isset( $options['github-branch'] ) ) {
			$options['github_branch'] = $options['github-branch'];
			unset( $options['github-branch'] );
		}

		if ( isset( $options['github-repository-reset'] ) ) {
			unset( $options['github-repository-reset'] );
		}

		if ( isset( $options['github-webhook-url'] ) ) {
			$options['github_webhook_url'] = $options['github-webhook-url'];
			unset( $options['github-webhook-url'] );
		}

		if ( isset( $options['fix-cors'] ) ) {
			$options['fix_cors'] = $options['fix-cors'];
			unset( $options['fix-cors'] );
		}

		if ( isset( $options['static-url'] ) ) {
			$options['static_url'] = $options['static-url'];
			unset( $options['static-url'] );
		}

		if ( isset( $options['use-forms'] ) && $options['use-forms'] == 'yes' ) {
			$options['use_forms'] = true;
			unset( $options['use-forms'] );
		} else {
			$options['use_forms'] = false;
			unset( $options['use-forms'] );
		}

		if ( isset( $options['use-comments'] ) && $options['use-comments'] == 'yes' ) {
			$options['use_comments'] = true;
			unset( $options['use-comments'] );

			// Modify default WordPress comments.
			$require_registration = get_option( 'comment_registration' );
			$require_name_mail    = get_option( 'require_name_email' );

			if ( 1 == $require_registration ) {
				update_option( 'comment_registration', 0 );
			}

			if ( 0 == $require_name_mail ) {
				update_option( 'require_name_email', 1 );
			}

		} else {
			$options['use_comments'] = false;
			unset( $options['use-comments'] );
		}

		if ( isset( $options['comment-redirect'] ) ) {
			$options['comment_redirect'] = $options['comment-redirect'];
			unset( $options['comment-redirect'] );
		}

		if ( isset( $options['use-search'] ) && $options['use-search'] == 'yes' ) {
			$options['use_search'] = true;
			unset( $options['use-search'] );
		} else {
			$options['use_search'] = false;
			unset( $options['use-search'] );
		}

		if ( isset( $options['search-type'] ) ) {
			$options['search_type'] = $options['search-type'];
			unset( $options['search-type'] );
		}

		if ( isset( $options['search-index-title'] ) ) {
			$options['search_index_title'] = $options['search-index-title'];
			unset( $options['search-index-title'] );
		}

		if ( isset( $options['search-index-content'] ) ) {
			$options['search_index_content'] = $options['search-index-content'];
			unset( $options['search-index-content'] );
		}

		if ( isset( $options['search-index-excerpt'] ) ) {
			$options['search_index_excerpt'] = $options['search-index-excerpt'];
			unset( $options['search-index-excerpt'] );
		}

		if ( isset( $options['search-excludable'] ) ) {
			$search_urls_to_exclude = [];

			if ( is_array( $options['search-excludable'] ) ) {
				foreach ( $options['search-excludable'] as $url => $data ) {
					$search_urls_to_exclude[] = $url;
				}
				$options['search_excludable'] = implode( "\n", $search_urls_to_exclude );
			} elseif ( is_scalar( $options['search-excludable'] ) ) {
				$options['search_excludable'] = sanitize_textarea_field( (string) $options['search-excludable'] );
			} else {
				$options['search_excludable'] = '';
			}
			unset( $options['search-excludable'] );
		}

		if ( isset( $options['algolia-app-id'] ) ) {
			$options['algolia_app_id'] = $options['algolia-app-id'];
			unset( $options['algolia-app-id'] );
		}

		if ( isset( $options['algolia-admin-api-key'] ) ) {
			$options['algolia_admin_api_key'] = $options['algolia-admin-api-key'];
			unset( $options['algolia-admin-api-key'] );
		}

		if ( isset( $options['algolia-search-api-key'] ) ) {
			$options['algolia_search_api_key'] = $options['algolia-search-api-key'];
			unset( $options['algolia-search-api-key'] );
		}

		if ( isset( $options['algolia-index'] ) ) {
			$options['algolia_index'] = $options['algolia-index'];
			unset( $options['algolia-index'] );
		}

		if ( isset( $options['algolia-selector'] ) ) {
			$options['algolia_selector'] = $options['algolia-selector'];
			unset( $options['algolia-selector'] );
		}

		// Set Cron.
		$options['server_cron'] = false;

		// Set version for upgrade.
		$options['version'] = SIMPLY_STATIC_VERSION;

		update_option( 'simply-static', $options );

		// Table validation.
		Page::create_or_update_table();

		// Clear options cache.
		wp_cache_flush();
	}
}
