Reset. 

				Project NpcChatModel {{
	
					Create a project that consists of just POCO Models.  The project will use the framework .NET Standard 2.1.
										
					In the NPCChatModel project create a folder named "Models". 

					 PropertyValue {{ 
						In the Models folder create a file named "PropertyValue.cs" with a class of the same name. The class will have 5 properties.  
							The 1st property is an int data type named "Id". 
							The 2nd property is an int data type named "PropertyTypeId".  
							The 3rd property is a string data type named "PropertyTypeValue".
							The 4th property is a string data type named "Value".					
							
							The 5th is a class of PropertyType type.
					}}
					
					PropertyType {{ 
						In the Models folder create a file named "PropertyType.cs" with a class of the same name. The class will have 4 properties.  
							The 1st property is an int data type named "Id". 
							The 2nd property is a string data type named "Name".
							The 3rd property is a string data type named "Descr".		

							The 4th property will be of data type List<PropertyValue> named "PropertyValues".
					}}	

					NonPlayerCharacter {{
						In the models folder create a file name "NonPlayerCharacter.cs" with a class name of the same name.
						The class will have the following properties
					
						The 1st property is an int data type named "Id" . 
						
						The class will have the following additional properties;
						
						A property in of data type int, named "WorldBackgroundId".
						
						A property in of data type int, named "Alignment_LawChaosId".
						A property in of data type int, named "Alignment_GoodEvilId".
						A property in of data type int, named  "AgeId".
						A property in of data type int, named  "SanityId".
						A property of data type int and a name of "GeneralTendenciesId".
						A property of data type int and a name of "PossessionsId".
						A property of data type int and a name of "GeneralId".
					
						A property of data type int and a name of "GeneralId".
						A property of data type int and a name of "PersonalityId".
						
						A property of data type int and a name of "Personality_BalancedId".
						A property of data type int and a name of "Personality_ExtrovertedId".
						A property of data type int and a name of "Personality_IntrovertedId".
						
						A property of data type int and a name of "DispositionId".
						A property of data type int and a name of "IntellectId".
						
						A property of data type int and a name of "NatureId".
						A property of data type int and a name of "MaterialismId".
						A property of data type int and a name of "HonestyId".
						A property of data type int and a name of "BraveryId".
						A property of data type int and a name of "EnergyId".
						
						A property of data type int and a name of "ThriftId".
						A property of data type int and a name of "MoralsId".
						A property of data type int and a name of "PietyId".
						A property of data type int and a name of "InterestsId".
						A property of data type int and a name of "CollectionsId".
						
						
					
						A property in of data type PropertyValue, named "WorldBackground".				
						A property of data type PropertyValue  named "AlignmentLawChaos".
						A property of data type PropertyValue  named "AlignmentGoodEvil".
						A property of data type PropertyValue  named  "Age".
						A property of data type PropertyValue  named  "Sanity".
						A property of data type PropertyValue and a name of "GeneralTendencies".
						A property of data type PropertyValue and a name of "Possessions".
						A property of data type PropertyValue and a name of "General".
					
						A property of data type PropertyValue and a name of "General".
						A property of data type PropertyValue and a name of "Personality".
						
						A property of data type PropertyValue and a name of "Personality_Balanced".
						A property of data type PropertyValue and a name of "Personality_Extroverted".
						A property of data type PropertyValue and a name of "Personality_Introverted".
						
						A property of data type PropertyValue and a name of "Disposition".
						A property of data type PropertyValue and a name of "Intellect".
						
						A property of data type PropertyValue and a name of "Nature".
						A property of data type PropertyValue and a name of "Materialism".
						A property of data type PropertyValue and a name of "Honesty".
						A property of data type PropertyValue and a name of "Bravery".
						A property of data type PropertyValue and a name of "Energy".
						
						A property of data type PropertyValue and a name of "Thrift".
						A property of data type PropertyValue and a name of "Morals".
						A property of data type PropertyValue and a name of "Piety".
						A property of data type PropertyValue and a name of "Interests".
						A property of data type PropertyValue and a name of "Collections".						
						
					}}						
				}}
				
				Project NpcChatUi {{
				
					Use Microsoft Blazor to create a software project named "NpcChatUi".  The Project will use WASM project scaffolding.   The project will use .NET CORE 8.0. The project will use the Blazorise UI framework. 

					This project will rely on the NPCChatModel for model classes.
									
					service {{
						In the NpcChatUi project create a folder named "Services". Inside the Services folder create a folder named "Interfaces". 
						
						GameMaster service {{
							In the Services folder create a class file name "GameMasterService.cs".  In the Interfaces folder create a interface file named "IGameMasterService.cs". GameMasterService implements IGameMasterService interface. GameMasterService allows access via http to methods on a REST API server.

							In GameMasterService class create a method named "Gets" with one input parameter, a string named "propertyType". GetPropertys() returns List<PropertyValue>. 
							
							In GameMasterService class create a method named "GetPropertys" with one input parameter, an int named "propertyTypeId". GetPropertys() returns List<PropertyValue>. 

							In GameMasterService class create a method named "SaveNpc" with one input parameter.  The input parameter is of data type NonPlayerCharacter and named "npcName".

							Within the BasePage class the service can be accessed via a variable name "gameMasterSvc".	
						}}
						
						Player service {{
							In the Services folder create a class file name "PlayerService.cs".  In the Interfaces folder create a interface file named "IPlayerService.cs". PlayerService implements IPlayerService. PlayerService allows access via http to methods on a REST API server.	

							In GameMasterService class create a method named "Interact" with one input parameter, a string named "reaction".

							Within the BasePage class the service can be accessed via a variable name "playerSvc".
						}}
						
					}}
					
					pages {{
						The NPCChat project will have a blazor page named "BasePage.razor".
							The "BasePage.razor" page will have a separate partial code behind file name "BasePage.razor.cs". 

						BasePage {{
							
							Initialization {{
								When the page is initial invoked the initialization routine will;
									Invoke the gameMasterSvc method GetNpcs() and store the results in a page level variable named "_npcs" of type List<NonPlayerCharacter>.
									
									Invoke the gameMasterSvc method GetPropertyTypes() and store the results in a page level variable named "_propertyTypes" of the type List<PropertyType>.
							 
							}}
							
							tab control {{
								"BasePage.razor" has a tab control on it. on "BasePage.razor" there is a tab control has two tabs.  Use the Blazorize tab control.  The first tab is named "Game Master", the second tab is named "Player".  Each tab control has a Blazor Form on it.   
							}}				
							
							refresh data {{
								The "BasePage.razor.cs" will contain an additional method named "RefreshData". 
								
								Method "RefreshData" will contain a call to a REST API named "restGameMaster". 
								
								Method "RefreshData" will call the GetPropertys() method on the GameMasterSvc.   GetPropertys() with have a propertyType value of "WorldBackground".  GetPropertys() has a single parameter named "propertyType". 
							}}			
							
							game master tab {{								

								The tab named "Game Master" has a Blazor form that handles it's submission via a method in "BasePage.razor.cs" named "HandleGameMasterSubmit".  
								
								The code behind file will contain an additional async method named "HandleGameMasterSubmit" that will be called when the form is submitted.
								
								The "Game Master" tab has the following controls all of which are part of the form named "gameMasterForm".
								
								A dropdown edit control named "pWorldBackground".  This control displays the results of the call to gameMasterSvc.GetPropertys("BackgroundWorld").
								

								
								a string control name "NPC Name".  
							
								
								
								
				
							}}
							
							player tab {{
								The tab named "Player" has a textarea control on it. 

								The tab named "Player" has a Blazor form that handles it's submission via a method in "BasePage.razor.cs" named "HandlePlayerSubmit".  
										
								The code behind file will contain an additional async method named "HandlePlayerSubmit" that will be called when the form is submitted.
								
								HandlePlayerSubmit {{
									when the method HandlePlayerSubmit is called it calls 
								}}
							}}
						}}	
					}}
				}}
			
				Project NpcChatApi {{
					Use Microsoft C# to create a software project name "NpcChatApi".  The project will be a API project.   The project will use .NET CORE 8.0.
					
					This project will rely on the NPCChatModel for model classes.
					
					Player controller {{
						Create an API Controller name "PlayerController". 
						
						The controller will have a HTTP POST method named named "Interact" with one input parameter, a string named "reaction". This method will return a string.
					
					}}
					
					GameMaster controller {{
						Create an API Controller name "GameMasterController". 
					
						The controller will have an HTTP GET method named "GetPropertys" with one input parameter, a string named "propertyType". GetPropertys() returns a list of class AnyProperty. 
					}}
					
					Models {{
						Create a folder in the NpcChatApi named "Models".
						
						Create a class named "PropertyType.cs" to model a SQL database table named "PropertyType". The table will have the fields; 
							"Id" with an int data type that is an identity column.
							"Name" with a varchar(50) data type with a default value of "". 
					
						Create a class named "Property.cs" to model a SQL database table named "Property". The table will have the fields; 
							"Id" with an int data type that is an identity column.
							"PropertyTypeId" with an int data type that is a foreign key to the table PropertyType.
							"Value" with a varchar(100) data type with a default value of "".
					}}
				
				}}