from entsoe import Area 
from dataclasses import dataclass
from enum import Enum

@dataclass
class Area_details:
    name: str
    code: str
    tz: str

@dataclass
class spotON_Area():
    AL = Area_details('AL','10YAL-KESH-----5','Europe/Tirane')
    AT = Area_details('AT','10YAT-APG------L','Europe/Vienna')
    BA = Area_details('BA','10YBA-JPCC-----D','Europe/Sarajevo')
    BE = Area_details('BE','10YBE----------2','Europe/Brussels')
    BG = Area_details('BG','10YCA-BULGARIA-R','Europe/Sofia')
    BY = Area_details('BY','10Y1001A1001A51S','Europe/Minsk')
    CH = Area_details('CH','10YCH-SWISSGRIDZ','Europe/Zurich')
    CWE = Area_details('CWE','10YDOM-REGION-1V','Europe/Brussels')
    CY = Area_details('CY','10YCY-1001A0003J','Asia/Nicosia')
    CZ = Area_details('CZ','10YCZ-CEPS-----N','Europe/Prague')
    CZ_DE_SK = Area_details('CZ_DE_SK','10YDOM-CZ-DE-SKK','Europe/Prague')
    DE = Area_details('DE','10Y1001A1001A83F','Europe/Berlin')
    DE_50HZ = Area_details('DE_50HZ','10YDE-VE-------2','Europe/Berlin')
    DE_AMPRION = Area_details('DE_AMPRION','10YDE-RWENET---I','Europe/Berlin')
    DE_AT_LU = Area_details('DE_AT_LU','10Y1001A1001A63L','Europe/Berlin')
    DE_LU = Area_details('DE_LU','10Y1001A1001A82H','Europe/Berlin')
    DE_TENNET = Area_details('DE_TENNET','10YDE-EON------1','Europe/Berlin')
    DE_TRANSNET = Area_details('DE_TRANSNET','10YDE-ENBW-----N','Europe/Berlin')
    DK = Area_details('DK','10Y1001A1001A65H','Europe/Copenhagen')
    DK_1 = Area_details('DK_1','10YDK-1--------W','Europe/Copenhagen')
    DK_1_NO_1 = Area_details('DK_1_NO_1','46Y000000000007M','Europe/Copenhagen')
    DK_2 = Area_details('DK_2','10YDK-2--------M','Europe/Copenhagen')
    DK_CA = Area_details('DK_CA','10Y1001A1001A796','Europe/Copenhagen')
    EE = Area_details('EE','10Y1001A1001A39I','Europe/Tallinn')
    ES = Area_details('ES','10YES-REE------0','Europe/Madrid')
    FI = Area_details('FI','10YFI-1--------U','Europe/Helsinki')
    FR = Area_details('FR','10YFR-RTE------C','Europe/Paris')
    GB = Area_details('GB','10YGB----------A','Europe/London')
    GB_ELECLINK = Area_details('GB_ELECLINK','11Y0-0000-0265-K','Europe/London')
    GB_IFA = Area_details('GB_IFA','10Y1001C--00098F','Europe/London')
    GB_IFA2 = Area_details('GB_IFA2','17Y0000009369493','Europe/London')
    GB_NIR = Area_details('GB_NIR','10Y1001A1001A016','Europe/Belfast')
    GR = Area_details('GR','10YGR-HTSO-----Y','Europe/Athens')
    HR = Area_details('HR','10YHR-HEP------M','Europe/Zagreb')
    HU = Area_details('HU','10YHU-MAVIR----U','Europe/Budapest')
    IE = Area_details('IE','10YIE-1001A00010','Europe/Dublin')
    IE_SEM = Area_details('IE_SEM','10Y1001A1001A59C','Europe/Dublin')
    IS = Area_details('IS','IS','Atlantic/Reykjavik')
    IT = Area_details('IT','10YIT-GRTN-----B','Europe/Rome')
    IT_BRNN = Area_details('IT_BRNN','10Y1001A1001A699','Europe/Rome')
    IT_CALA = Area_details('IT_CALA','10Y1001C--00096J','Europe/Rome')
    IT_CNOR = Area_details('IT_CNOR','10Y1001A1001A70O','Europe/Rome')
    IT_CSUD = Area_details('IT_CSUD','10Y1001A1001A71M','Europe/Rome')
    IT_FOGN = Area_details('IT_FOGN','10Y1001A1001A72K','Europe/Rome')
    IT_GR = Area_details('IT_GR','10Y1001A1001A66F','Europe/Rome')
    IT_MACRO_NORTH = Area_details('IT_MACRO_NORTH','10Y1001A1001A84D','Europe/Rome')
    IT_MACRO_SOUTH = Area_details('IT_MACRO_SOUTH','10Y1001A1001A85B','Europe/Rome')
    IT_MALTA = Area_details('IT_MALTA','10Y1001A1001A877','Europe/Rome')
    IT_NORD = Area_details('IT_NORD','10Y1001A1001A73I','Europe/Rome')
    IT_NORD_AT = Area_details('IT_NORD_AT','10Y1001A1001A80L','Europe/Rome')
    IT_NORD_CH = Area_details('IT_NORD_CH','10Y1001A1001A68B','Europe/Rome')
    IT_NORD_FR = Area_details('IT_NORD_FR','10Y1001A1001A81J','Europe/Rome')
    IT_NORD_SI = Area_details('IT_NORD_SI','10Y1001A1001A67D','Europe/Rome')
    IT_PRGP = Area_details('IT_PRGP','10Y1001A1001A76C','Europe/Rome')
    IT_ROSN = Area_details('IT_ROSN','10Y1001A1001A77A','Europe/Rome')
    IT_SACO_AC = Area_details('IT_SACO_AC','10Y1001A1001A885','Europe/Rome')
    IT_SACO_DC = Area_details('IT_SACO_DC','10Y1001A1001A893','Europe/Rome')
    IT_SARD = Area_details('IT_SARD','10Y1001A1001A74G','Europe/Rome')
    IT_SICI = Area_details('IT_SICI','10Y1001A1001A75E','Europe/Rome')
    IT_SUD = Area_details('IT_SUD','10Y1001A1001A788','Europe/Rome')
    LT = Area_details('LT','10YLT-1001A0008Q','Europe/Vilnius')
    LU = Area_details('LU','10YLU-CEGEDEL-NQ','Europe/Luxembourg')
    LV = Area_details('LV','10YLV-1001A00074','Europe/Riga')
    MD = Area_details('MD','10Y1001A1001A990','Europe/Chisinau')
    ME = Area_details('ME','10YCS-CG-TSO---S','Europe/Podgorica')
    MK = Area_details('MK','10YMK-MEPSO----8','Europe/Skopje')
    MT = Area_details('MT','10Y1001A1001A93C','Europe/Malta')
    NL = Area_details('NL','10YNL----------L','Europe/Amsterdam')
    NO = Area_details('NO','10YNO-0--------C','Europe/Oslo')
    NO_1 = Area_details('NO_1','10YNO-1--------2','Europe/Oslo')
    NO_1A = Area_details('NO_1A','10Y1001A1001A64J','Europe/Oslo')
    NO_2 = Area_details('NO_2','10YNO-2--------T','Europe/Oslo')
    NO_2A = Area_details('NO_2A','10Y1001C--001219','Europe/Oslo')
    NO_2_NSL = Area_details('NO_2_NSL','50Y0JVU59B4JWQCU','Europe/Oslo')
    NO_3 = Area_details('NO_3','10YNO-3--------J','Europe/Oslo')
    NO_4 = Area_details('NO_4','10YNO-4--------9','Europe/Oslo')
    NO_5 = Area_details('NO_5','10Y1001A1001A48H','Europe/Oslo')
    PL = Area_details('PL','10YPL-AREA-----S','Europe/Warsaw')
    PL_CZ = Area_details('PL_CZ','10YDOM-1001A082L','Europe/Warsaw')
    PT = Area_details('PT','10YPT-REN------W','Europe/Lisbon')
    RO = Area_details('RO','10YRO-TEL------P','Europe/Bucharest')
    RS = Area_details('RS','10YCS-SERBIATSOV','Europe/Belgrade')
    RU = Area_details('RU','10Y1001A1001A49F','Europe/Moscow')
    RU_KGD = Area_details('RU_KGD','10Y1001A1001A50U','Europe/Kaliningrad')
    SE = Area_details('SE','10YSE-1--------K','Europe/Stockholm')
    SE_1 = Area_details('SE_1','10Y1001A1001A44P','Europe/Stockholm')
    SE_2 = Area_details('SE_2','10Y1001A1001A45N','Europe/Stockholm')
    SE_3 = Area_details('SE_3','10Y1001A1001A46L','Europe/Stockholm')
    SE_4 = Area_details('SE_4','10Y1001A1001A47J','Europe/Stockholm')
    SI = Area_details('SI','10YSI-ELES-----O','Europe/Ljubljana')
    SK = Area_details('SK','10YSK-SEPS-----K','Europe/Bratislava')
    TR = Area_details('TR','10YTR-TEIAS----W','Europe/Istanbul')
    UA = Area_details('UA','10Y1001C--00003F','Europe/Kiev')
    UA_BEI = Area_details('UA_BEI','10YUA-WEPS-----0','Europe/Kiev')
    UA_DOBTPP = Area_details('UA_DOBTPP','10Y1001A1001A869','Europe/Kiev')
    UA_IPS = Area_details('UA_IPS','10Y1001C--000182','Europe/Kiev')
    UK = Area_details('UK','10Y1001A1001A92E','Europe/London')
    XK = Area_details('XK','10Y1001C--00100H','Europe/Rome')
    pass

def create():
    # Create a list of all bidding zones
    bidding_zones = [f"{area.name} = Area_details(name='{area.name}',code='{area.code}',tz='{area.tz}')" for area in Area]

    bidding_zones.sort()
    # Print all bidding zones
    for zone in bidding_zones:
        print(zone)

create()