# 1 "/mnt/c/Projects/VSIM/SimulationCore2/CSharp/BasicInputs/Bha/CStringConfiguration.f90"
module CStringConfiguration
	use CStringConfigurationVariables
	use SimulationVariables
	use json_module
	
	implicit none    
	public    
    contains
    
	subroutine StringConfigurationFromJson(parent)
		use json_module,IK =>json_ik
        type(json_value),pointer :: parent
        type(json_core) :: json
        type(json_value),pointer :: p,pitems,pitem,pval,pbit
		logical::is_found
		integer::i,n_children
		CHARACTER(KIND=JSON_CK, LEN=:), ALLOCATABLE :: val


        call json%get(parent,'StringConfiguration',p)

		call json%get(p,'StringConfigurationItems',pitems)
		call json%info(pitems, n_children=n_children)
		if (.not. allocated(data%Configuration%StringConfiguration%StringConfigurations)) then
			ALLOCATE(data%Configuration%StringConfiguration%StringConfigurations(n_children))
		endif
		if(size(data%Configuration%StringConfiguration%StringConfigurations)/=n_children) then
			DEALLOCATE(data%Configuration%StringConfiguration%StringConfigurations)
			ALLOCATE(data%Configuration%StringConfiguration%StringConfigurations(n_children))
		endif


		do i=1,n_children
			call json%get_child(pitems, i, pitem, found=is_found)
	
			call json%get(pitem,"ComponentType",pval)
			call json%get(pval,data%Configuration%StringConfiguration%StringConfigurations(i)%ComponentType)
			call json%get(pitem,"NumberOfJoint",pval)
			call json%get(pval,data%Configuration%StringConfiguration%StringConfigurations(i)%NumberOfJoint)
			call json%get(pitem,"LengthPerJoint",pval)
			call json%get(pval,data%Configuration%StringConfiguration%StringConfigurations(i)%LengthPerJoint)
			call json%get(pitem,"NominalOd",pval)
			call json%get(pval,data%Configuration%StringConfiguration%StringConfigurations(i)%NominalOd)
			call json%get(pitem,"NominalId",pval)
			call json%get(pval,data%Configuration%StringConfiguration%StringConfigurations(i)%NominalId)
			call json%get(pitem,"WeightPerLength",pval)
			call json%get(pval,data%Configuration%StringConfiguration%StringConfigurations(i)%WeightPerLength)
			call json%get(pitem,"ComponentLength",pval)
			call json%get(pval,data%Configuration%StringConfiguration%StringConfigurations(i)%ComponentLength)
			call json%get(pitem,"NominalToolJointOd",pval)
			call json%get(pval,data%Configuration%StringConfiguration%StringConfigurations(i)%NominalToolJointOd)
			call json%get(pitem,"Grade",pval)
			call json%get(pval,val)
			data%Configuration%StringConfiguration%StringConfigurations(i)%Grade = val
		end do
		call json%get(p,'BitDefenition',pbit)
		call json%get(pbit,'BitType',pval)
		call json%get(pval,data%Configuration%StringConfiguration%BitDefinition%BitType)
		call json%get(pbit,'BitSize',pval)
		call json%get(pval,data%Configuration%StringConfiguration%BitDefinition%BitSize)
		call json%get(pbit,'BitCodeHundreds',pval)
		call json%get(pval,data%Configuration%StringConfiguration%BitDefinition%BitCodeHundreds)
		call json%get(pbit,'BitCodeTens',pval)
		call json%get(pval,data%Configuration%StringConfiguration%BitDefinition%BitCodeTens)
		call json%get(pbit,'BitCodeOnes',pval)
		call json%get(pval,data%Configuration%StringConfiguration%BitDefinition%BitCodeOnes)
		call json%get(pbit,'BitNozzleSize',pval)
		call json%get(pval,data%Configuration%StringConfiguration%BitDefinition%BitNozzleSize)
		call json%get(pbit,'BitLength',pval)
		call json%get(pval,data%Configuration%StringConfiguration%BitDefinition%BitLength)
		call json%get(pbit,'BitWeightPerLength',pval)
		call json%get(pval,data%Configuration%StringConfiguration%BitDefinition%BitWeightPerLength)
		call json%get(pbit,'BitNozzleNo',pval)
		call json%get(pval,data%Configuration%StringConfiguration%BitDefinition%BitNozzleNo)
		call json%get(pbit,'FloatValve',pval)
		call json%get(pval,data%Configuration%StringConfiguration%BitDefinition%FloatValve)
	end subroutine

    subroutine StringConfigurationToJson(parent)

        type(json_value),pointer :: parent
        type(json_core) :: json
        type(json_value),pointer :: pitems,pitem,pbit,p
		integer:: i,n
! 1. create new node
		call json%create_object(p,'StringConfiguration')
        call json%create_array(pitems,'StringConfigurationItems')

! 2. add member of data type to new node
		n = data%Configuration%StringConfiguration%StringConfigurationCount
		do i=1,n
			call json%create_object(pitem,'')
			call json%add(pitem,"ComponentLength",data%Configuration%StringConfiguration%StringConfigurations(i)%ComponentLength)
			call json%add(pitem,"ComponentType",data%Configuration%StringConfiguration%StringConfigurations(i)%ComponentType)
			call json%add(pitem,"Grade",data%Configuration%StringConfiguration%StringConfigurations(i)%Grade)
			call json%add(pitem,"LengthPerJoint",data%Configuration%StringConfiguration%StringConfigurations(i)%LengthPerJoint)
			call json%add(pitem,"NominalId",data%Configuration%StringConfiguration%StringConfigurations(i)%NominalId)
			call json%add(pitem,"NominalOd",data%Configuration%StringConfiguration%StringConfigurations(i)%NominalOd)
			call json%add(pitem,"NominalToolJointOd",data%Configuration%StringConfiguration%StringConfigurations(i)%NominalToolJointOd)
			call json%add(pitem,"NumberOfJoint",data%Configuration%StringConfiguration%StringConfigurations(i)%NumberOfJoint)
			call json%add(pitem,"WeightPerLength",data%Configuration%StringConfiguration%StringConfigurations(i)%WeightPerLength)
			call json%add(pitems,pitem)
		end do
		
		call json%create_object(pbit,"BitDefenition")
		call json%add(pbit,"BitCodeHundreds",data%Configuration%StringConfiguration%BitDefinition%BitCodeHundreds)
		call json%add(pbit,"BitCodeOnes",data%Configuration%StringConfiguration%BitDefinition%BitCodeOnes)
		call json%add(pbit,"BitCodeTens",data%Configuration%StringConfiguration%BitDefinition%BitCodeTens)
		call json%add(pbit,"BitLength",data%Configuration%StringConfiguration%BitDefinition%BitLength)
		call json%add(pbit,"BitNozzleNo",data%Configuration%StringConfiguration%BitDefinition%BitNozzleNo)
		call json%add(pbit,"BitNozzleSize",data%Configuration%StringConfiguration%BitDefinition%BitNozzleSize)
		call json%add(pbit,"BitSize",data%Configuration%StringConfiguration%BitDefinition%BitSize)
		call json%add(pbit,"BitType",data%Configuration%StringConfiguration%BitDefinition%BitType)
		call json%add(pbit,"BitWeightPerLength",data%Configuration%StringConfiguration%BitDefinition%BitWeightPerLength)
		call json%add(pbit,"FloatValve",data%Configuration%StringConfiguration%BitDefinition%FloatValve)

! call json%add(p,"StringConfigurationCount",dat%Configuration%StringConfiguration%StringConfigurationCount)
! 3. add new node to parent
		call json%add(p,pitems)
		call json%add(p,pbit)
		call json%add(parent,p)
    end subroutine
end module CStringConfiguration