// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.

using System;

namespace Microsoft.AspNetCore.Razor.Language
{
	internal class DefaultRazorCodeGenerationOptionsBuilder : RazorCodeGenerationOptionsBuilder
	{
		private bool _designTime;

		public DefaultRazorCodeGenerationOptionsBuilder( RazorConfiguration configuration, string fileKind )
		{
			if ( configuration == null )
			{
				throw new ArgumentNullException( nameof( configuration ) );
			}

			Configuration = configuration;
			FileKind = fileKind;
		}

		public DefaultRazorCodeGenerationOptionsBuilder( bool designTime )
		{
			_designTime = designTime;
		}

		public override RazorConfiguration Configuration { get; }

		public override bool DesignTime => _designTime;

		public override string FileKind { get; }

		public override int IndentSize { get; set; } = 4;

		public override bool IndentWithTabs { get; set; }

		public override bool SuppressChecksum { get; set; }

		public override bool SuppressNullabilityEnforcement { get; set; }

		public override bool OmitMinimizedComponentAttributeValues { get; set; }

		public override bool SupportLocalizedComponentNames { get; set; }

		public override RazorCodeGenerationOptions Build()
		{
			return new DefaultRazorCodeGenerationOptions(
				IndentWithTabs,
				IndentSize,
				DesignTime,
				RootNamespace,
				SuppressChecksum,
				SuppressMetadataAttributes,
				SuppressNullabilityEnforcement,
				OmitMinimizedComponentAttributeValues,
				SupportLocalizedComponentNames )
			{
				SuppressMetadataSourceChecksumAttributes = SuppressMetadataSourceChecksumAttributes,
			};
		}

		public override void SetDesignTime( bool designTime )
		{
			_designTime = designTime;
		}
	}
}
