If you are asking only about politeness, then John-san would sound politer. The rule is that san takes precedence.
But in Japan, you won't use first names to call people very often in the first place. John-san does not sound too weird primarily because it is not a Japanese name.
Normally, firstname-san would require some kind of relationship between the speaker and the addressed (e.g. wife and husband). And familyname-kun would also require* some relationship, e.g. addressing to someone less senior. So as a practical advice, you should stay away from both if you are not sure of the implications.
*in case of grownups. Among boys, familyname-kun is quite normal.
In case of high school students.
Consider 苗木誠 (Naegi Makoto), 十神白夜 (Togami Byakuya), 朝日奈葵 (Asahina Aoi). Disclaimer: LGBT is not considered.
Though most probably how they call each other is simply the author's choice, suppose they are real.
First, in case of students of this age*, family name-san would be the norm when a boy addressing a girl, family name-kun when a girl addressing a boy. So in reality it is quite normal 苗木 (and 十神) call her 朝日奈さん, and 朝日奈 calls them 苗木くん/十神くん. (*what I write here should roughly apply to 10+ years old.)
Second I guess use of 葵さん is simply because (1) 朝日奈 is a little long and (2) あさひなさん is slightly hard to pronounce due to the double さ.
Use of ちゃん would sound that the boy knowing her since childhood. It is possible for a high school boy to use ちゃん if that is how he calls her for a long time, or he is particularly friendly or even possibly tries to make advance on her.
Third, regarding use of くん from 苗木 to 十神, it looks mostly due to the personality of 苗木 (who is described お人好しで心優しい性格の、平和主義な常識人). Apart from the soft personality, use of くん could mean 苗木 feels distance toward 十神. Calling 白夜君 won't be impossible , but this also kind of suggests knowing him for a long time.
In reality, boys call each other by family name alone if they are close enough. If they talk to each other every day, they would quite probably call each other 苗木/十神. If they are in the same class, know each other, but are not close, then 苗木くん/十神くん are likely. Students who speak in a rough way would use 苗木/十神 even to peers of such a relationship.
So these depend on age, relationship, speaker's personality, etc. Another factor is names themselves. I myself once wondered why 夏目漱石/森鴎外/芥川龍之介 are referred to as 漱石/鴎外/芥川, but after all these are just conventions, possibly due to the ease of pronunciations.