\ExplSyntaxOn
\prop_new:N \g_pgfgo_profile_profile_prop

\prop_new:N \g_pgfgo_profile_player_prop
\prop_new:N \g_pgfgo_profile_goban_prop



\cs_new:Nn \pgfgo_profile_use_goban:n {
	\pgfgo_set:e{goban = {\prop_item:Nn\g_pgfgo_profile_goban_prop {#1}}}
}

\cs_new:Nn \pgfgo_profile_use_neutral:n	{\pgfgo_set:e{players = {neutral 	= {\prop_item:Nn\g_pgfgo_profile_player_prop {#1}}}}}
\cs_new:Nn \pgfgo_profile_use_black:n 	{\pgfgo_set:e{players = {black 		= {\prop_item:Nn\g_pgfgo_profile_player_prop {#1}}}}}
\cs_new:Nn \pgfgo_profile_use_white:n 	{\pgfgo_set:e{players = {white 		= {\prop_item:Nn\g_pgfgo_profile_player_prop {#1}}}}}

\cs_new:Nn \pgfgo_profile_use_players:nnn {
	\pgfgo_profile_use_neutral:n	{#1}
	\pgfgo_profile_use_black:n 		{#2}
	\pgfgo_profile_use_white:n 		{#3}
}



	




\keys_define:nn {pgfgo / profiles / goban} {
	from 		.tl_set:N = \l_pgfgo_profile_goban_from_tl,
	append 	.code:n = {\keys_set:nn {pgfgo / profiles / goban} {from = { \l_pgfgo_profile_define_goban_name_tl }}}
}



\DeclareDocumentCommand{\pgfgodefinegoban}{O{}mm}{
	\tl_clear:N \l_tmpa_tl %CONSTRUCCION DE LA KEY
	\tl_set:Nn\l_pgfgo_profile_define_goban_name_tl {#2} %OJO PORQUE SE CONSERVA EL NOMBRE 
	\keys_set:nn {pgfgo / profiles / goban} {#1}
	\tl_if_empty:NF \l_pgfgo_profile_goban_from_tl{
		\tl_set:Nf \l_tmpa_tl {\prop_item:Ne\g_pgfgo_profile_goban_prop {\l_pgfgo_profile_goban_from_tl},}
	}
	\prop_gput:Nno\g_pgfgo_profile_goban_prop {#2} {\l_tmpa_tl, #3}
}



\keys_define:nn {pgfgo / profiles / player} {
	from 		.tl_set:N = \l_pgfgo_profile_player_from_tl,
	append 	.code:n = {\keys_set:nn {pgfgo / profiles / player} {from = { \l_pgfgo_profile_define_player_name_tl }}}
}


\DeclareDocumentCommand{\pgfgodefineplayer}{O{}mm}{
	\tl_clear:N \l_tmpa_tl %CONSTRUCCION DE LA KEY
	\tl_set:Nn\l_pgfgo_profile_define_player_name_tl {#2} %OJO PORQUE SE CONSERVA EL NOMBRE 
	\keys_set:nn {pgfgo / profiles / player} {#1}
	\tl_if_empty:NF \l_pgfgo_profile_player_from_tl{
		\tl_set:Nf \l_tmpa_tl {\prop_item:Ne\g_pgfgo_profile_player_prop {\l_pgfgo_profile_player_from_tl},}
	}
	\prop_gput:Nno\g_pgfgo_profile_player_prop {#2} {\l_tmpa_tl, #3}
}



\cs_new:Nn\pgfgo_profile_use_profile:n{
	\pgfgo_profile_use_goban:n	{#1}
	\pgfgo_profile_use_neutral:n{#1-neutral}
	\pgfgo_profile_use_black:n	{#1-black}
	\pgfgo_profile_use_white:n	{#1-white}
}






	
\let\pgfgouseprofile	\pgfgo_profile_use_profile:n 		%CARGA TABLERO, PIEDRAS con sufijo -goban, white, black, neutral
\let\pgfgousegoban		\pgfgo_profile_use_goban:n			%CARGA GOBAN
\let\pgfgouseplayers	\pgfgo_profile_use_players:nnn 	%CARGA TODOS LOS JUGADORES {neutral}{black}{white}
\let\pgfgouseneutral	\pgfgo_profile_use_neutral:n 		%CARGA UN PERFIL PARA LOS NEUTROS
\let\pgfgouseblack		\pgfgo_profile_use_black:n 			%CARGA UN PERFIL PARA LAS NEGRAS
\let\pgfgousewhite		\pgfgo_profile_use_white:n 			%CARGA UN PERFIL PARA LAS BLANCAS



\ExplSyntaxOff




%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%------------DEFAULT
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\pgfgodefinegoban{default}{
	scale = 1,
	use i = true,
	background = {
		line = {
			true,
			color = black,
			opacity = 1,
			width = 0.75pt,
		},
		fill = {
			true,
			color = white,
			opacity = 1
		},
		rounded corners = 0pt,
		sep = 0.825em,
		drop shadow = false,
	},
	grid = {
		line = {
			color = black,
			opacity = 1,
			width = 0.55pt,
		}, 
		sep = 1.25em,
	},
	label = {
		text color = black,
		false,
		sep = 0.35cm},
	scale = 1,
	partial = {false},
	size = 9
}



\pgfgodefineplayer{default-neutral}{
	stone = {
		line = {
			true,
			color = black,
			width = 0.7pt,
			opacity = 1
		},
		fill = {
			true,
			color = gray,
			opacity = 1
		},
		radius = 5.5pt,
		scale = 1,
		drop shadow = false,
		drop shine = false,
	},
	move = {
		label = {
			color = black,
			format = arabic
		}
	},
	mark = {
		line = {
			color = black,
			width = 1pt
		},
		fill = {
			false,
			color = black
		},
		label = {
			color = black
		},
	}
}




\pgfgodefineplayer[from = default-neutral]{default-white}{
	stone = {fill = {color = white}}
}



\pgfgodefineplayer[from = default-neutral]{default-black}{
	stone = {fill = {color = black}},
	move = {
		label = {
			color = white,
			format = arabic,
		}
	},
	mark = {
		line = 	{color = white},
		fill = 	{false},
		label = {color = white},
	}
}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%---------------WAIN
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\definecolor{waingoban}{HTML}{402A2D}
\definecolor{waingoban-s}{HTML}{493739}
\definecolor{waingrid}{HTML}{FAE0B2}
\definecolor{wainblack}{HTML}{4B4B4D} %PIEDRA NEGRA
\definecolor{wainshade}{HTML}{E6E7E8}
\definecolor{wainwhite}{HTML}{EFEFEF} %PIEDRA BLACA



\pgfgodefinegoban[from = default]{wain}{
	background = {
		fill = {
			color = waingoban,
			opacity = 1},
		line = {
			color = waingrid,
			opacity = 1}},
	grid = {
		line = {
			color = waingrid,
			width = 1pt}
		},
	label = {text color = waingoban}
}





\pgfgodefineplayer[from = default-neutral]{wain-neutral}{
	stone = {
		line = {
			true,
			color = waingrid,
			width = 0.2pt,
			opacity = 1,
		},
		fill = {
			true,
			color = wainblack!50!wainwhite,
			opacity = 1,
		},
		radius = 0.17cm,
		scale = 1,
		drop shadow = {true, opacity = 0.5, offset = 1pt, angle = -45},
		drop shine = {true, angle = 45, color = wainshade}
	},
	move = {
		label = {
			color = black,
			format = arabic,
		}
	},
	mark = {
		line = {
			color = waingoban,
			width = 1pt,
		},
		fill = {false},
		label = {
			color = waingoban,
			format = arabic
		},
	}
}





\pgfgodefineplayer[from = wain-neutral]{wain-white}{
	stone = {
		fill = {
			color = wainwhite
		}
	},
	move = {
		label = {
			color = waingoban
		}
	},
	mark = {
		line = {
			color = waingoban,
		},
		label = {color = waingoban}
	}
}





\pgfgodefineplayer[from = wain-neutral]{wain-black}{
	stone = {
		fill = {
			color = wainblack
		}
	},
	move = {
		label = {
			color = waingrid
		}
	},
	mark = {
		line = {
			color = waingrid,
		},
		label = {color = waingrid}
	}
}



%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%---------------PGFGO
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%




\pgfgodefinegoban{pgfgo}{
	background = {
		fill = {
			color = pgfgo,
			opacity = 1},
		line = {
			color = pgfgo!10!black,
			opacity = 1},
		drop shadow = {true},
		rounded corners = {
			inner = 0pt,
			outer = 2pt
		}},
	grid = {
		line = {
			color = pgfgo!10!black,
			width = 1pt}},
	label = {
		text color = black
	}
}



\pgfgodefineplayer{pgfgo-neutral}{
	stone = {
		radius = 0.19cm,
		line = {
			true,
			color = black,
			width = 0.3pt,
			opacity = 1,
		},
		fill = {
			true,
			color = gray,
			opacity = 1,
		},
		radius = 0.17cm,
		scale = 1,
		drop shadow = {true, opacity = 0.5, offset = 1pt, angle = -45},
		drop shine = {true, angle = 45, color = wainshade}
	},
	move = {
		label = {
			color = black,
			format = arabic,
		}
	},
	mark = {
		line = {
			color = black,
			width = 1pt,
		},
		fill = {false},
		label = {
			color = black,
			format = arabic
		}
	}
}

\pgfgodefineplayer[from = pgfgo-neutral]{pgfgo-white}{
	stone = {
		fill = {color = wainwhite},
		drop shine = {color = white}
	},
	move = {
		label = {
			color = black
		}
	},
	mark = {
		line 	= {color = black},
		fill 	= {color = white},
		label = {color = black}
	}
}




\pgfgodefineplayer[from = pgfgo-neutral]{pgfgo-black}{
	stone = {
		fill = {
			color = wainblack
		}
	},
	move = {
		label = {
			color = pgfgo
		}
	},
	mark = {
		line = {
			color = pgfgo,
		},
		label = {color = black}
	}
}





%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%PGFGOSMOOTH
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\definecolor{pgfgosmooth-grid}{HTML}{C7A253}

\pgfgodefinegoban[from = pgfgo]{pgfgosmooth}{
	background = {
		line = false,
		rounded corners = {
			inner = 2pt,
			outer = 8pt
		},
		drop shadow = {true}},
	grid = {
		line = {color = pgfgosmooth-grid}
		}
}




\pgfgodefineplayer[from = pgfgo-neutral]{pgfgosmooth-neutral}{
	stone = {
		line = false,
		radius = 0.19cm,
		drop shine = {opacity = 0.5}}
}

\pgfgodefineplayer[from = pgfgo-black]{pgfgosmooth-black}{
	stone = {line = false, drop shine = {opacity = 0.5}}
}
	
\pgfgodefineplayer[from = pgfgo-white]{pgfgosmooth-white}{
	stone = {line = false}	
}
