use super::debug_report_components_builder_input_contracts::LoggingSchemaDebugReportComponentsBuilderInput;
use super::debug_report_components_builder_stage_input_assembly::build_debug_report_components_builder_stage_input_assembly;
use super::debug_report_components_builder_stage_input_contracts::LoggingSchemaDebugReportComponentsBuilderStageInput;
use super::debug_report_components_builder_stage_output_assembly::build_debug_report_components_builder_stage_output_assembly;
use super::debug_report_components_contracts::LoggingSchemaDebugReportComponents;
use super::debug_report_components_evaluation_stage::build_debug_report_components_evaluation_stage;
use super::debug_report_components_from_builder_stage_output_assembly::build_logging_schema_debug_report_components_from_builder_stage_output_assembly;
use super::debug_report_components_observed_stage::build_debug_report_components_observed_map;
use super::debug_report_components_observed_stage_input_assembly::build_debug_report_components_observed_stage_input_assembly;
pub(super) fn build_logging_schema_debug_report_components(
input: LoggingSchemaDebugReportComponentsBuilderInput,
) -> LoggingSchemaDebugReportComponents {
let LoggingSchemaDebugReportComponentsBuilderInput { relations, columns } = input;
let observed_stage_input =
build_debug_report_components_observed_stage_input_assembly(relations, columns);
let observed_map = build_debug_report_components_observed_map(observed_stage_input);
let evaluation_stage = build_debug_report_components_evaluation_stage(&observed_map);
let stage_input: LoggingSchemaDebugReportComponentsBuilderStageInput =
build_debug_report_components_builder_stage_input_assembly(observed_map, evaluation_stage);
let stage = build_debug_report_components_builder_stage_output_assembly(stage_input);
build_logging_schema_debug_report_components_from_builder_stage_output_assembly(stage)
}