
    aj                        d Z ddlZddlZddlmZ ddlmZ ddlZddl	Z	ddl
mZ ddlmZ ddlmZ  ej                   d      Ze	j$                   G d	 d
             Ze	j$                   G d d             Ze	j$                   G d d             Ze	j$                   G d d             Ze	j$                   G d d             Ze	j$                   G d d             Ze	j$                   G d d             Ze	j$                   G d d             Ze	j$                   G d d             Ze	j$                   G d d             Ze	j:                   G d d             Ze	j:                   G d d              Ze	j:                   G d! d"             Z e	j:                   G d# d$             Z!e	j:                   G d% d&             Z"e	j:                   G d' d(             Z#d)e$d*efd+Z%d,e&d*e$fd-Z'd.e&d*e$fd/Z(d0e&d*e$fd1Z)d2e&d*e$fd3Z*e	j$                   G d4 d5             Z+e	j$                   G d6 d7             Z, e	jZ                  e+e,8      Z.y)9a  
GraphQL schema for the Scheduler service.

Defines Strawberry types, queries, and mutations that mirror the PHP
GraphQL scheduler widget (SchedulerType, SchedulerQuery, SchedulersQuery,
CreateSchedulerMutation, UpdateSchedulerMutation, DeleteSchedulerMutation).
    N)date)Optional)Upload)Info)get_dynamic_connectionzscheduler.importc                       e Zd ZU dZeed<   dZee   ed<   dZ	ee   ed<   dZ
ee   ed<   dZee   ed<   dZee   ed<   dZee   ed	<   dZee   ed
<   dZee   ed<   y)	Schedulerz!Mirrors PHP SchedulerType fields.idNr   timehomeawaylocationdivision
created_at
updated_at)__name__
__module____qualname____doc__int__annotations__r   r   strr   r   r   r   r   r   r        9/var/www/html/myl_app/scheduler-service/graphql_schema.pyr	   r	      sz    +GD(3-D(3-D(3-D(3-"Hhsm""Hhsm" $J$ $J$r   r	   c                   @    e Zd ZU dZee   ed<   eed<   eed<   eed<   y)PaginatedSchedulerz,Wraps a paginated list of scheduler entries.datatotalpageper_pageN)r   r   r   r   listr	   r   r   r   r   r   r   r   *   s    6
y/J
IMr   r   c                   *    e Zd ZU dZeed<   dZeed<   y)DeleteResultzResult of a delete operation.success messageN)r   r   r   r   boolr   r'   r   r   r   r   r$   r$   3   s    'MGSr   r$   c                   &    e Zd ZU dZeed<   eed<   y)ImportLeagueSetupResultz*Result of a league setup import operation.r%   r'   N)r   r   r   r   r(   r   r   r   r   r   r*   r*   :   s    4MLr   r*   c                   D    e Zd ZU dZeed<   dZee   ed<   dZ	ee   ed<   y)Seasonz"Represents a season in the league.	season_idNseason_descyear_id)
r   r   r   r   r   r   r.   r   r   r/   r   r   r   r,   r,   A   s&    ,N!%K#%!GXc]!r   r,   c                   0    e Zd ZU dZeed<   dZee   ed<   y)Divisionz$Represents a division in the league.division_idNdivision_name)	r   r   r   r   r   r   r3   r   r   r   r   r   r1   r1   I   s    .#'M8C='r   r1   c                   :    e Zd ZU dZeed<   eed<   dZee	   ed<   y)CreateSeasonResultz&Result of a season creation operation.r%   r'   Nr-   )
r   r   r   r   r(   r   r   r-   r   r   r   r   r   r5   r5   P   s    0ML#Ix}#r   r5   c                   :    e Zd ZU dZeed<   eed<   dZee	   ed<   y)CreateDivisionResultz(Result of a division creation operation.r%   r'   Nr2   )
r   r   r   r   r(   r   r   r2   r   r   r   r   r   r7   r7   X   s    2ML!%K#%r   r7   c                   :    e Zd ZU dZeed<   eed<   dZee	   ed<   y)CreateFieldResultz%Result of a field creation operation.r%   r'   Nfield_id)
r   r   r   r   r(   r   r   r:   r   r   r   r   r   r9   r9   `   s    /ML"Hhsm"r   r9   c                   :    e Zd ZU dZeed<   eed<   dZee	   ed<   y)CreateTeamResultz$Result of a team creation operation.r%   r'   Nteam_id)
r   r   r   r   r(   r   r   r=   r   r   r   r   r   r<   r<   h   s    .ML!GXc]!r   r<   c                   N    e Zd ZU dZeed<   eed<   eed<   eed<   eed<   eed<   y)	CreateSchedulerInputz#Input for createScheduler mutation.r   r   r   r   r   r   N)r   r   r   r   r   r   r   r   r   r?   r?   t   s#    -
I
I
I
IMMr   r?   c                       e Zd ZU dZeed<   dZee   ed<   dZ	ee   ed<   dZ
ee   ed<   dZee   ed<   dZee   ed<   dZee   ed	<   y)
UpdateSchedulerInputu;   Input for updateScheduler mutation — all fields optional.r
   Nr   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rA   rA      s^    EGD(3-D(3-D(3-D(3-"Hhsm""Hhsm"r   rA   c                       e Zd ZU dZeed<   eed<   eed<   eed<   dZe	e   ed<   dZ
e	e   ed	<   dZe	e   ed
<   dZe	e   ed<   dZe	e   ed<   y)CreateSeasonInputz Input for createSeason mutation.season_name
start_dateend_dateseason_yearactivestatusNregistration_startregistration_endearly_bird_datelate_fee_date)r   r   r   r   r   r   r   r   rI   r   rJ   rK   rL   rM   r   r   r   rC   rC      sd    *N$FHSM$)--'+htn+&*OXd^*$(M8D>(r   rC   c                   b    e Zd ZU dZeed<   eed<   dZee   ed<   dZ	ee   ed<   dZ
ee   ed<   y	)
CreateDivisionInputz"Input for createDivision mutation.r3   gender        start_age_or_gradeend_age_or_grader   	max_teamsN)r   r   r   r   r   r   rR   r   floatrS   rT   r   r   r   r   rO   rO      s<    ,K*--(+huo+ Ix} r   rO   c                   0    e Zd ZU dZeed<   dZee   ed<   y)CreateFieldInputzInput for createField mutation.
field_nameNaddress)r   r   r   r   r   r   rY   r   r   r   r   rW   rW      s    )O!GXc]!r   rW   c                   X    e Zd ZU dZeed<   eed<   eed<   dZee   ed<   dZ	ee   ed<   y)CreateTeamInputzInput for createTeam mutation.	team_namer2   home_field_idNaffiliationr-   )
r   r   r   r   r   r   r   r^   r   r-   r   r   r   r[   r[      s2    (N!%K#%#Ix}#r   r[   game_idreturnc                    | j                         5 }|j                  d|f       |j                         }|st        d      |j                  d|f       |j                         }|r|j	                  d      nd}|t        |      }d}|rX|j	                  d      rG|j                  d|d   f       |j                         }|r|j	                  d      t        |d         }d}|j	                  d	      r9|j                  d
|d	   f       |j                         }	|	r|	j	                  d      }d}
|j	                  d      r9|j                  d
|d   f       |j                         }	|	r|	j	                  d      }
d}|r|j	                  d      r|j                  d|d   f       |j                         }|r|j	                  dd      nd}d}|rM|j	                  d      r<|j                  d|d   f       |j                         }|r|j	                  dd      nd}|r
|r| d| }n
|xs |xs d}d}|j	                  d      r:|j                  d|d   f       |j                         }|r|j	                  dd      }t        |d   ||||
|||j	                  d      rt        |d         nd|j	                  d      rt        |d         nd	      cddd       S # 1 sw Y   yxY w)z
    Build a full Scheduler object for a game row, joining schedule,
    timeslot, team, resource, site, and level tables.
    Mirrors PHP SchedulerType field resolvers.
     SELECT * FROM game WHERE id = %szScheduler entry not found8SELECT * FROM schedule WHERE relationshipid = %s LIMIT 1	rscs_dateNts_idz2SELECT ts_starttime FROM timeslot WHERE ts_id = %sts_starttime	home_teamz'SELECT teamname FROM team WHERE id = %steamname	away_teamr&   rsc_idz(SELECT * FROM resource WHERE rsc_id = %srsc_namesite_idz-SELECT site_name FROM site WHERE site_id = %s	site_namez @ idlevelz+SELECT description FROM level WHERE id = %sdescriptionr
   r   r   )	r
   r   r   r   r   r   r   r   r   )cursorexecutefetchone	Exceptiongetr   r	   )connr_   curgamescheduledate_valtime_valts	home_namet	away_namelocation_valresourcerk   rm   sitedivision_vallvls                     r   _resolve_gamer      s    
 _
#6
C||~788 	FJ	
 <<> 198<<,d8}H W-KKD'"$ Bbff^,8r.12 	88K KK9k"$ AEE*-	 	88K KK9k"$ AEE*-	 X.KK:(#% ||~H7?x||J3RHIHLL3Ci(* ||~9=DHH["52	I"*3yk:':9: 88IKK=i" ,,.C"ww}b9Dz!!26((<2Hs4-.d26((<2Hs4-.d

k_
 _
 _
s   KKK'r\   c                     | j                  d|f       | j                         }|r|d   S | j                  d||dd f       |j                          | j                  S )z7Find a team by name or create it.  Returns the team id.z'SELECT id FROM team WHERE teamname = %sr
   z1INSERT INTO team (teamname, abbr) VALUES (%s, %s)N   rq   rr   commit	lastrowid)rv   ru   r\   rows       r   _find_or_create_teamr      s]    KK9I<H
,,.C
4yKK;	IbqM" 	KKM==r   ro   c                     | j                  d|f       | j                         }|r|d   S | j                  d|f       |j                          | j                  S )z2Find a level/division by description or create it.z+SELECT id FROM level WHERE description = %sr
   z+INSERT INTO level (description) VALUES (%s)r   )rv   ru   ro   r   s       r   _find_or_create_levelr   .  sO    KK=~N
,,.C
4yKK=~NKKM==r   rk   c                     | j                  d|f       | j                         }|r|d   S | j                  d|f       |j                          | j                  S )z.Find a resource/location by name or create it.z/SELECT rsc_id FROM resource WHERE rsc_name = %srj   z+INSERT INTO resource (rsc_name) VALUES (%s)r   )rv   ru   rk   r   s       r   _find_or_create_resourcer   9  sO    KKAH;O
,,.C
8}KK={KKKM==r   
start_timec                     | j                  d|f       | j                         }|r|d   S | j                  d||f       |j                          | j                  S )z+Find a timeslot by start time or create it.z2SELECT ts_id FROM timeslot WHERE ts_starttime = %sre   z?INSERT INTO timeslot (ts_starttime, ts_endtime) VALUES (%s, %s)r   )rv   ru   r   r   s       r   _find_or_create_timeslotr   D  sW    KKDzmT
,,.C
7|KKI	Z  	KKM==r   c            
          e Zd Z ej                  d      dededefd       Z ej                  d      	 ddeded	ede	fd
       Z
 ej                  d      dedee   fd       Z ej                  d      dedee   fd       Zy)Queryz;Get a single scheduler entry by ID. Mirrors SchedulerQuery.ro   infor
   r`   c                 z    |j                   d   }t        |      5 }t        ||      cd d d        S # 1 sw Y   y xY w)Ndb_name)contextr   r   )selfr   r
   r   ru   s        r   	schedulerzQuery.schedulerX  s9    ,,y)#G, 	+ r*	+ 	+ 	+s   1:z@List all scheduler entries (paginated). Mirrors SchedulersQuery.limitr    c           	         |j                   d   }t        |      5 }|j                         5 }|j                  d       |j	                         d   }|dz
  |z  }|j                  d||f       |j                         }	d d d        	D 
cg c]  }
t        ||
d          }}
d d d        t        ||      S # 1 sw Y   <xY wc c}
w # 1 sw Y   )xY w)Nr   z SELECT COUNT(*) AS cnt FROM gamecnt   z2SELECT id FROM game ORDER BY id LIMIT %s OFFSET %sr
   )r   r   r    r!   )r   r   rp   rq   rr   fetchallr   r   )r   r   r   r    r   ru   rv   r   offsetrowsr   itemss               r   
schedulerszQuery.schedulers^  s     ,,y)#G, 	E 
&#>?u-(e+HFO ||~
& @DD]4T3DED	E "e$
 	

& 
& E	E 	Es/   C	AB8=C		CC	8C	=C		Cz+Get the list of seasons in ascending order.c           	      @   |j                   d   }t        |      5 }|j                         5 }|j                  d       |j	                         }d d d        d d d        D cg c]  }t        |d   |d   |d          c}S # 1 sw Y   6xY w# 1 sw Y   :xY wc c}w )Nr   zISELECT season_id, season_desc, year_id FROM season ORDER BY season_id ASCr-   r.   r/   )r-   r.   r/   )r   r   rp   rq   r   r,   r   r   r   ru   rv   r   r   s          r   seasonszQuery.seasonsv  s    ,,y)#G, 	& &#_ ||~	&	& 
  k*.I
 	
& &	& 	&
s(   B"BB"BB	BBz-Get the list of divisions in ascending order.c                 8   |j                   d   }t        |      5 }|j                         5 }|j                  d       |j	                         }d d d        d d d        D cg c]  }t        |d   |d          c}S # 1 sw Y   2xY w# 1 sw Y   6xY wc c}w )Nr   z1SELECT id, description FROM level ORDER BY id ASCr
   ro   )r2   r3   )r   r   rp   rq   r   r1   r   s          r   	divisionszQuery.divisions  s    ,,y)#G, 	& &#G ||~	&	& 

 	 I!-0
 	
& &	& 	&
s(   B"A?B"B?B	BBN)d   r   )r   r   r   
strawberryfieldr   r   r	   r   r   r   r"   r,   r   r1   r   r   r   r   r   r   V  s    Z"_`+d + +	 + a+
 Z"de89

!$
25
	
 f
. Z"OP
D 
T&\ 
 Q
" Z"QR
d 
tH~ 
 S
r   r   c                      e Zd Z ej                  d      dededefd       Z ej                  d      dede	defd       Z
 ej                  d	      ded
edefd       Z ej                  d      dededefd       Z ej                  d      dededefd       Z ej                  d      dededefd       Z ej                  d      dededefd       Z ej                  d      dededefd       Zy)Mutationz>Create a new scheduler entry. Mirrors CreateSchedulerMutation.r   r   inputr`   c           
      r   |j                   d   }t        |      5 }|j                         5 }t        |||j                        }t        |||j
                        }t        |||j                        }t        |||j                        }	t        |||j                        }
|j                  d|||ddf       |j                          |j                  }|j                  d||j                  |	|
df       |j                          d d d        t!        |      cd d d        S # 1 sw Y   xY w# 1 sw Y   y xY w)Nr   z_INSERT INTO game (home_team, away_team, idlevel, status, game_type) VALUES (%s, %s, %s, %s, %s)r   seasonziINSERT INTO schedule (relationshipid, rscs_date, rsc_id, ts_id, sched_status) VALUES (%s, %s, %s, %s, %s))r   r   rp   r   r   r   r   r   r   r   r   r   rq   r   r   r   r   )r   r   r   r   ru   rv   home_team_idaway_team_idlevel_idresource_idtimeslot_idr_   s               r   create_schedulerzMutation.create_scheduler  s   ,,y)#G, 	0 #3CuzzJ3CuzzJ0dENNK6sD%..Q6sD%**M 2!<1hG
 -- 2ejj+{AF
 -0 !w/3	0 	0 	0 	0s#   D-CD!D-!D*	&D--D6zDUpdate an existing scheduler entry. Mirrors UpdateSchedulerMutation.c           	         |j                   d   }t        |      5 }|j                         5 }|j                  }|j	                  d|f       |j                         }|st        d|       i }|j                  t        |||j                        |d<   |j                  t        |||j                        |d<   |j                  t        |||j                        |d<   |rQdj                  d |D              }	|j	                  d	|	 d
g |j                         |       |j                          |j	                  d|f       |j                         }
i }|j                  |j                  |d<   |j                   t#        |||j                         |d<   |j$                  t'        |||j$                        |d<   |r|
rBdj                  d |D              }	|j	                  d|	 dg |j                         |       nw||d<   d|d<   dj                  |j)                               }dj                  dgt+        |      z        }|j	                  d| d| dt-        |j                                      |j                          d d d        t/        |      cd d d        S # 1 sw Y   xY w# 1 sw Y   y xY w)Nr   rb   z"Scheduler entry not found with ID rg   ri   rn   , c              3   &   K   | ]	  }| d   ywz = %sNr   .0ks     r   	<genexpr>z,Mutation.update_scheduler.<locals>.<genexpr>  s     *L1aS;*L   zUPDATE game SET z WHERE id = %src   rd   rj   re   c              3   &   K   | ]	  }| d   ywr   r   r   s     r   r   z,Mutation.update_scheduler.<locals>.<genexpr>  s     .Tq!E{.Tr   zUPDATE schedule SET z WHERE relationshipid = %srelationshipidr   sched_statusz%szINSERT INTO schedule (z
) VALUES ())r   r   rp   r
   rq   rr   rs   r   r   r   r   r   joinvaluesr   r   r   r   r   r   keyslentupler   )r   r   r   r   ru   rv   r_   rw   game_update
set_clauserx   schedule_updatecolsplaceholderss                 r   update_schedulerzMutation.update_scheduler  s   ,,y)#G, @	0 ="#(( >
K||~#&H	$RSS !::)/CCuzz/ZK,::)/CCuzz/ZK,>>--B3enn-]K	*!%*L*L!LJKK*:,nE8+,,.88 KKM NJ <<>"$::)38::OK0>>-0HT5>>1OH- ::)/GT5::0OG, #%)YY.TO.T%T
2:,>XY@o446@@
 =D(89:;7#yy)=)=)?@'+yy$#o:N1N'O4TF*\NRST!/"8"8":; KKM{="~ !w/A@	0 @	0=" ="@	0 @	0s#   J5I J)J5)J2	.J55J>z:Delete a scheduler entry. Mirrors DeleteSchedulerMutation.r
   c                 8   |j                   d   }t        |      5 }|j                         5 }|j                  d|f       |j                  d|f       |j	                          d d d        d d d        t        dd| d      S # 1 sw Y   "xY w# 1 sw Y   &xY w)Nr   z.DELETE FROM schedule WHERE relationshipid = %szDELETE FROM game WHERE id = %sTzScheduler entry z	 deleted.r%   r'   )r   r   rp   rq   r   r$   )r   r   r
   r   ru   rv   s         r   delete_schedulerzMutation.delete_scheduler  s    ,,y)#G, 	 #Dre <reD	 D4DRD	2RSS 	 	s"   B7B#BB		BBz-Import league setup from Excel file template.filec                 0  K   |j                          d {   }t        |      dkD  rt        dd      S |j                  j	                  d      st        dd      S |j
                  j                  d      }|st        dd      S d	 }	 t        j                  |      } ||d
g d      }t        |      dk7  rt        dt        |             |j                  d   }d }	t        |      5 }
|
j                         5 }d}t        |d         j                         j                         dv rd}|j!                  d|d   t#        j$                  |d         j'                         t#        j$                  |d         j'                         t)        |d          |	|j                  d             |	|j                  d             |	|j                  d             |	|j                  d            |f	       |j*                  }|j-                  d        ||dddg      }i }|j/                         D ]  \  }}t        |d         j                         j                         }d}d|v sd|v sd |v rd!}nd"|v sd#|v sd$|v rd}d% }|j                  d&      }t#        j0                  |      r't        |      j                         d'k7  rt)        |      nd}|j!                  d(|d   | ||j                  d)             ||j                  d*            |f       |j*                  ||d   <    |j-                  d        ||d+d,g      }i }|j/                         D ]  \  }}|j                  d-      }d}|rt        |      j                         d'k7  rdt        |      j                         }|j!                  d.|f       |j3                         }|r|d/   }n |j!                  d0||f       |j*                  }|j!                  d1|d,   f       |j3                         }|r|d2   }n#|j!                  d3|d,   |f       |j*                  }|||d,   <    |j-                  d        ||d4g d5      }g } |j/                         D ]P  \  }!}|d6   |vr| j5                  d7|!d8z    d9|d6    d:       |d;   |vs3| j5                  d7|!d8z    d<|d;    d:       R | rt        d=d>j7                  |       z         |j/                         D ]  \  }}t#        j0                  |j                  d?            rSt        |j                  d?            j                         d'k7  r(t        |j                  d?            j                         nd }"|j!                  d@|dA   |dA   d dB ||d6      ||d;      |"f        |
j9                          d d d        d d d        t        dCdDt               dEt               dFt               dG      S 7 # 1 sw Y   FxY w# 1 sw Y   JxY w# t        $ r8}#t:        j=                  dH|#        t        dt        |#            cY d }#~#S d }#~#wt>        $ r1}$t:        jA                  dI|$ dCJ       t        ddK      cY d }$~$S d }$~$ww xY ww)LNi   Fz!File size exceeds the 10MB limit.r   z.xlsxz%Only .xlsx Excel files are supported.r   %Organisation database not configured.c           	      >   	 t        j                  | |d      }|j                  d      }|j                  D cg c]*  }t	        |      j                  d      j                         , c}|_        g }|D ]  }||j                  vrt        d| d	|       |||   j                         ||   j                  t              j                  j                         d
k(  z     }|j                  ry|j                  j                         D 	cg c]  }	|	dz   	 }
}	|j                  ||
f        |r)dj                  d |D              }t        d| d|       |j!                  d      S # t        $ r}t        d| dt	        |             d }~ww xY wc c}w c c}	w )Nr   )
sheet_nameheaderzFailed to read sheet 'z': all)how*[z] missing expected column: r&      r   c              3   2   K   | ]  \  }}d | d|   yw)'z' blank at row(s) Nr   )r   colr   s      r   r   zCMutation.import_league_setup.<locals>.load_sheet.<locals>.<genexpr>4  s"     #h)#tau,>tf$E#hs   z] required fields blank: T)drop)pd
read_excelrs   
ValueErrorr   dropnacolumnsrstripstripisnaastypeemptyindextolistappendr   reset_index)
excel_filer   required_colsdfecmissing_requiredr   
blank_rowsidxrow_numbersdetailss               r   
load_sheetz0Mutation.import_league_setup.<locals>.load_sheet  s   S]]:*QO u%B>@jjI#a&--,224IBJ!$ @bjj($q4OPSu%UVV3"S'..2E2I2I2O2O2QUW2W XY
!''6@6F6F6M6M6O"Ps37"PK"P$++S+,>?@  ))#hWg#hh 1ZL0I'!STT>>t>,,)  S #9*SQ!QRRS
 J #Qs"   E* /F
F*	F3FFr,   )Season Name
Start DateEnd DateStatusSeason Yearr   z%Expected exactly 1 season row, found r   c                     t        j                  |       st        |       j                         dk(  ry 	 t        j                  |       j                         S # t        $ r Y y w xY w)Nr&   )r   r   r   r   to_datetimer   rs   vals    r   opt_datez.Mutation.import_league_setup.<locals>.opt_dateA  sQ    773<3s8>>#3r#9 >>#.3355    s   "A 	A#"A#r   inactivehiddenhide  
                        INSERT INTO season (
                            season_desc, season_start, season_end, year_id,
                            reg_start_date, reg_end_date, early_bird_1, late_fee_date,
                            season_order, season_type, hide, League_ID
                        ) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, 1.00, 1, %s, 1)
                        r   r   r   r   zRegistration StartzRegistration EndzEarly Bird DatezLate Fee Date	DivisionszDivision NameGendergirlfemalewomen   boymalemenc                     t        j                  |       st        |       j                         dk(  ry	 t	        |       S # t
        $ r Y yw xY w)Nr&   rQ   )r   r   r   r   rU   rs   r  s    r   parse_floatz1Mutation.import_league_setup.<locals>.parse_floats  sC    !wws|s3x~~/?2/E'+,',Sz 1#, ,'+,s   
? 	A
AzMax Teams in Divisionr&   a  
                            INSERT INTO level (
                                description, gender, start, end, max_teams,
                                League_ID, sp_id, div_code
                            ) VALUES (%s, %s, %s, %s, %s, 1, 1, "")
                            zStart (age or grade)zEnd (age or grade)Fieldsz
Field NameAddress5SELECT site_id FROM site WHERE site_name = %s LIMIT 1rl   HINSERT INTO site (site_name, site_address1, leagueID) VALUES (%s, %s, 1)7SELECT rsc_id FROM resource WHERE rsc_name = %s LIMIT 1rj   z
                                INSERT INTO resource (
                                    rsc_name, site_id, active, rsc_capacity, rsct_id, prim_tsg_id
                                ) VALUES (%s, %s, 1, 1, 0, 0)
                                Teams)	Team Namer1   
Home Fieldr1   zRow r   z: unknown Division 'r   r  z: unknown Home Field 'z!Teams tab has broken references:

zAffiliation/Cluba!  
                            INSERT INTO team (
                                teamname, abbr, level, homefield, affiliation,
                                League_ID, validated, paid_in_full
                            ) VALUES (%s, %s, %s, %s, %s, 1, 1, 0)
                            r     TzImported: 1 season, z divisions, z	 fields, z teams.z-Validation error during league setup import: z-Unexpected error during league setup import: exc_infozaAn unexpected database error occurred during import. Please check your data format and try again.)!readr   r*   filenameendswithr   rt   ioBytesIOr   ilocr   rp   r   r   lowerrq   r   r  r   r   r   seekiterrowsnotnarr   r   r   r   loggerwarningrs   error)%r   r   r   
file_bytesr   r   r   	season_dfr   r  ru   rv   hide_valr-   div_dfdivision_id_by_name_r   
gender_str
gender_valr  rT   max_teams_valfield_dffield_id_by_namerY   rl   addr_strsite_rowrsc_rowr:   team_dferrorsiaff_strver   s%                                        r   import_league_setupzMutation.import_league_setup  s      99;&
z?--*5Beff}}%%g.*5Bijj,,""9-*5Bijj	-2i	J/J #:x9{|I9~" #HYHX!YZZ^^A&F  (0 H"D[[] G"c H6(+,224::<@^^#$ KK #=1NN6,+?@EEGNN6*+=>CCE} 56$VZZ0D%EF$VZZ0B%CD$VZZ0A%BC$VZZ%@A$
( !$I OOA&'
K/S[A\]F*,'"(//"3 "R3%(X%7%=%=%?%E%E%G
%&
!Z/8z3IWXbMb)*J"j0Fj4HEU_L_)*J, %(GG,C$D	;=88I;NSVW`SaSgSgSimoSoIvw  !$O 4 * +CGG4J,K L +CGG4H,I J - EHMM+C,@AE"RJ OOA&)*hOH')$"*"3"3"5 G3"%'')"4"#"s7|'9'9';r'A'*7|'9'9';HKK(_bjalm'*||~H'*29*= #$n%-x$8!" +.-- $]`cdp`q_st"%,,."'.x'8HKK!$
 "%\!2G < (+}}H>F(\):;?GD OOA&(W>efGF")"2"2"4 d3z?2EE"MMDQ7KCPZOK\\]*^_|,4DD"MMDQ7McR^N_M``a*bc	d
 ()MPTPYPYZ`Pa)abb")"2"2"4 3OQxxX[X_X_`rXsOty|  ~A  ~E  ~E  FX  ~Y  zZ  z`  z`  zb  fh  zh#cgg.@&A"B"H"H"J  os  !$K 0 #K 0" 5 3C
O D 0\1B C '" KKMOG"H"T +.s6{m<HV_`cdk`l_mmtu A 'nG" G"H" H"^  	KNNJ2$OP*5#b'JJ 	LLHLW[L\*{ 	s   ZW?A4ZA#X /X N0X1DX=X9X >ZX	XXX 	Z#-YZZZ"&ZZ	ZZZzCreate a new season entry.c                    |j                   j                  d      }|st        dd      S 	 t        |      5 }|j	                         5 }|j                  d|j                  |j                  f       |j                         r:t        dd|j                   d|j                   d      cd d d        cd d d        S d	}|j                  r5t        |j                        j                         j                         d
v rd}|j                  d|j                  |j                  |j                  t        |j                        |j                   |j"                  |j$                  |j&                  |f	       |j)                          |j*                  }d d d        d d d        t        dd|j                   d      S # 1 sw Y   -xY w# 1 sw Y   1xY w# t,        $ r1}t.        j1                  d| d       t        dd      cY d }~S d }~ww xY w)Nr   Fr   r   zLSELECT season_id FROM season WHERE season_desc = %s AND year_id = %s LIMIT 1zSeason 'z' for year z already exists.r   r  r   r	  T' created successfully.)r%   r'   r-   z)Unexpected error during season creation: r  z=An unexpected database error occurred during season creation.)r   rt   r5   r   rp   rq   rD   rG   rr   rI   r   r   r'  rE   rF   r   rJ   rK   rL   rM   r   r   rs   r+  r-  )	r   r   r   r   ru   rv   r0  r-   r   s	            r   create_seasonzMutation.create_season  s#   ,,""9-%e=dee'	~'0 !.D[[]  .cKK nqv  rC  rC  EJ  EV  EV  qW  X||~1%8TYTeTeSffqrw  sD  sD  rE  EU  JV   W	 .  .!. !.  !H||ELL(9(?(?(A(G(G(IMk(k#$KK "--!,,!NN 1 12!44!22!11!//$
( KKM #IA .!.D &dhuGXGXFYYp<q  ~G  H  HC .  .!. !.F  	~LLDQCHSWLX%e=|}}	~s`   G GA F:(	G1	G ;CF:G#G :G	?GGG 	H&HHHzCreate a new division entry.c           
         |j                   j                  d      }|st        dd      S 	 t        |      5 }|j	                         5 }|j                  d|j                  f       |j                         r-t        dd|j                   d      cd d d        cd d d        S t        |j                        j                         j                         }d}d	|v sd
|v sd|v rd}nd|v sd|v sd|v rd}|j                  d|j                  ||j                  |j                  |j                  f       |j                          |j                   }d d d        d d d        t        dd|j                   d      S # 1 sw Y   -xY w# 1 sw Y   1xY w# t"        $ r1}	t$        j'                  d|	 d       t        dd      cY d }	~	S d }	~	ww xY w)Nr   Fr   r   z3SELECT id FROM level WHERE description = %s LIMIT 1z
Division '' already exists.r   r  r  r  r  r  r  r  r   a  
                        INSERT INTO level (
                            description, gender, start, end, max_teams,
                            League_ID, sp_id, div_code
                        ) VALUES (%s, %s, %s, %s, %s, 1, 1, "")
                        TrC  )r%   r'   r2   z+Unexpected error during division creation: r  z?An unexpected database error occurred during division creation.)r   rt   r7   r   rp   rq   r3   rr   r   rP   r   r'  rR   rS   rT   r   r   rs   r+  r-  )
r   r   r   r   ru   rv   r4  r5  r2   r   s
             r   create_divisionzMutation.create_division  s   ,,""9-'?fgg$	B'0 0D[[] 0cKK UX]XkXkWmn||~3EZX]XkXkWll}K~	0 00 0 "%U\\!2!8!8!:!@!@!BJ!"J+x:/ET^I^%&
*,*0DQ[H[%&
KK "//&!44!22!OO KKM"%--K;00> (
5K^K^J__v>w  FQ  R  R=0 00 0@  	BLLFqcJUYLZ'  @A  B  B	Bs`   F FAE:	F	F #B+E:F#F :F	?FFF 	G&GGGz"Create a new field/resource entry.c                    |j                   j                  d      }|st        dd      S 	 t        |      5 }|j	                         5 }|j                  d|j                  f       |j                         }|r1t        dd|j                   d|d   	      cd d d        cd d d        S d
}|j                  rt        |j                        j                         dk7  rnt        |j                        j                         }|j                  d|f       |j                         }	|	r|	d   }n |j                  d||f       |j                  }|j                  d|j                  |f       |j                          |j                  }
d d d        d d d        t        dd|j                   d
	      S # 1 sw Y   -xY w# 1 sw Y   1xY w# t        $ r1}t        j                  d| d       t        dd      cY d }~S d }~ww xY w)Nr   Fr   r   r  zField 'rF  rj   )r%   r'   r:   r   r&   r  rl   r  z
                        INSERT INTO resource (
                            rsc_name, site_id, active, rsc_capacity, rsct_id, prim_tsg_id
                        ) VALUES (%s, %s, 1, 1, 0, 0)
                        TrC  z(Unexpected error during field creation: r  z<An unexpected database error occurred during field creation.)r   rt   r9   r   rp   rq   rX   rr   rY   r   r   r   r   rs   r+  r-  )r   r   r   r   ru   rv   existingrl   r9  r:  r:   r   s               r   create_fieldzMutation.create_field>  s   ,,""9-$U<cdd%	|'0 -D[[] -cKK Y\a\l\l[no"||~H0'RWRbRbQcctHu  AI  JR  AS   T- -- -  G}}U]]);)A)A)Cr)I#&u}}#5#;#;#=$[^f]hi#&<<>#&.y&9GKK j!)8 4 '*mmGKK
 ))73 KKM"}}H=--@ %TWUEUEUDVVm;n  zB  C  C?- -- -B  	|LLCA3GRVLW$U<z{{	|s`   G	 F=AF1	F=	G	 )CF1F=#G	 1F:	6F==GG	 		H&G>8H>HzCreate a new team entry.c                    |j                   j                  d      }|st        dd      S 	 t        |      5 }|j	                         5 }|j                  d|j                  f       |j                         s-t        dd|j                   d      cd d d        cd d d        S |j                  d|j                  f       |j                         s-t        dd	|j                   d      cd d d        cd d d        S |j                  Z|j                  d
|j                  f       |j                         s-t        dd|j                   d      cd d d        cd d d        S |j                  d|j                  |j                  f       |j                         r:t        dd|j                   d|j                   d      cd d d        cd d d        S |j                  d d }|j                  d|j                  ||j                  |j                  |j                  |j                  t        |j                        nd f       |j                          |j                  }d d d        d d d        t        dd|j                   d      S # 1 sw Y   -xY w# 1 sw Y   1xY w# t        $ r1}t         j#                  d| d       t        dd      cY d }~S d }~ww xY w)Nr   Fr   r   z*SELECT id FROM level WHERE id = %s LIMIT 1zDivision ID z not found.z5SELECT rsc_id FROM resource WHERE rsc_id = %s LIMIT 1z	Field ID z9SELECT season_id FROM season WHERE season_id = %s LIMIT 1z
Season ID z>SELECT id FROM team WHERE teamname = %s AND level = %s LIMIT 1zTeam 'z ' already exists in division ID .r  a  
                        INSERT INTO team (
                            teamname, abbr, level, homefield, affiliation,
                            year, League_ID, validated, paid_in_full
                        ) VALUES (%s, %s, %s, %s, %s, %s, 1, 1, 0)
                        TrC  )r%   r'   r=   z'Unexpected error during team creation: r  z;An unexpected database error occurred during team creation.)r   rt   r<   r   rp   rq   r2   rr   r]   r-   r\   r^   r   r   r   rs   r+  r-  )	r   r   r   r   ru   rv   abbr_valr=   r   s	            r   create_teamzMutation.create_teamk  s   ,,""9-#E;bcc/	z'0 ),D[[] (,cKK LuO`O`Nbc<<>/V[VgVgUhhsGtu	(, (,), ), KK WZ_ZmZmYop<<>/SXSfSfRggrGst(, (,), ), 2$_bgbqbqast"||~#3EZX]XgXgWhhsKt#u(, (,), ),& KK `chcrcrty  uF  uF  cG  H||~/PUP_P_O`  aA  BG  BS  BS  AT  TU  HV   W)(, (,), ),.  %s3HKK "OO$!--!//!--49OO4OC0UY  KKM!mmGQ(,),T $DF5??BSSj:ku|}}S(, (,), ),V  	zLLB1#FQULV#E;xyy	zs   J% JAJ	J	J% #AJ*	J3	J% =AJ	J	J% #AJ	J	J% BJ!J)#J% J	JJ"J% %	K.&KKKN)r   r   r   r   mutationr   r?   r	   r   rA   r   r   r$   r   r   r*   rA  rC   r5   rD  rO   r7   rG  rW   r9   rJ  r[   r<   rN  r   r   r   r   r     s   Z%ef0T 02F 09 0 g0: Z%klB0T B02F B09 B0 mB0H Z%ab
TT 
Ts 
T| 
T c
T Z%TUPd P& PE\ P VPd Z%AB,~$ ,~/@ ,~EW ,~ C,~\ Z%CD)BD )B1D )BI] )B E)BV Z%IJ*| *|.> *|CT *| K*|X Z%?@4z 4z_ 4zAQ 4z A4zr   r   )queryrO  )/r   r$  loggingdatetimer   typingr   pandasr   r   strawberry.file_uploadsr   strawberry.typesr   dbr   	getLoggerr+  typer	   r   r$   r*   r,   r1   r5   r7   r9   r<   r   r?   rA   rC   rO   rW   r[   r   r   r   r   r   r   r   r   r   Schemaschemar   r   r   <module>r\     s   
      * ! %			-	. 
% 
% 
%          " " " ( ( ( $ $ $ & & & # # # " " "    # # # 
) 
) 
) ! ! ! " " " $ $ $e
 e
 e
Ps s # # # # C C $ @
 @
 @
N Az Az AzP 
			:r   