import geopandas as gpd
from shapely.geometry import Polygon
import matplotlib.pyplot as plt
import pandas as pd
from mpl_ornaments.titles import set_title_and_subtitle

fig, ax = plt.subplots(nrows=1, ncols=1)

#1
bounds = Polygon(shell=[sw := (-25,30), nw := (-25,72), ne := (60,72),
                        se := (60,30)])

#2
iso_country_codes = pd.read_csv(
    'data/iso-country-codes-with-continents.csv', comment='#') 
iso_country_codes_eur = iso_country_codes[
    iso_country_codes['continent'] == 'Europe']['iso3']

#3
gdata = gpd.read_file(f'data/world-administrative-boundaries/'
                      f'world-administrative-boundaries.shp') 
gdata = gdata[gdata['iso3'].isin(iso_country_codes_eur)]

#4
gdata = gdata.clip(mask=bounds)

#5
gdata = gdata.to_crs("ESRI:53004")

#6
gdata.plot(ax=ax, color='lightgrey', edgecolor='black', linewidth=0.3)

#7
ax.axis('off')

title = 'Europe administrative boundaries'
subtitle = f'Source: OpenDataSoft, Mercator projection (ESRI:53004)'
set_title_and_subtitle(fig=fig, title=title, subtitle=subtitle,
                       alignment='left', h_offset=80)
fig.savefig('charts/europe-administrative-boundaries.png', 
            bbox_inches='tight', dpi=600)