
    Ii!g                        d Z ddlZddlZddlZddlmZmZmZmZ ddlm	Z	 ddl
mZ ddlmZmZmZ ddl d ZddZddddddddddddddddddgZg dZddddd
dddd d!d"dd#d$d%d&d'dd(d)d*d+d,dd-d.d/d0d1dd2d3d4d5d6dgZd7d8d9d:d;d
id
d<d=d>d9d:d;d?id"d<d@dAd9dBdCdDid'd<dEdFd9dGdHd1dId,d<dJd&dKdLd;d
id1d<dMdNdKdLd;d'id6d<dOdPdQdRdSdTidUd<dVd0dQdRdSd)idWd<dXd+dQdRdSd.idYd<dZd[d9d\d]d'd^d?d<d_d`dKdadbd'idcd<dddedKdfdgd,idhd<didjd9dkd;d'idld<dmdnd9dod;d?idpd<dqdrdKdsi dtd<dudvdKdwd;d1idxd<gZdydHd]ddzd{d
d|d}gd~ddHdddd{d
ddgd~ddHd]ddTdd
ddgd~ddHdddd{d
ddgd~ddHddTddd
ddgd~ddHdddTdd
ddgd~ddDddddd
dgdddDddddd
dgdddDddddd
ddgdddDddddd
dgddddddd
dgddddddd
dgdddddTd
dgdddddd
ddgdddddd
ddgdddddd	d
ddgddddddd
d{gdddddddd
dddddddd"dddddddd"dddddddd
ddddd$d'ddgdddddd'd͜ddddd
d͜gZdddddҜdddddҜdddddҜd]ddddҜdddddҜdddddҜddddߜddddߜgZd Zedk(  r ej6                   e              yy)u   
Demo Data Seeder — Generates realistic data for the AI Adoption Tracker demo.

Run: python -m app.seed
Creates: 6 departments, 30 employees, 25+ activities, 200+ completions,
         quizzes, tracked links, sync configs, badges, levels, anomaly flags.
    N)datedatetime	timedeltatimezone)text)AsyncSession)async_sessionengineBase)*c                  H    t        j                  t        j                        S )N)r   nowr   utc     /code/app/seed.pyutcnowr      s    <<%%r   Z      c                 \    t        j                  ||       }t               t        |      z
  S )Ndays)randomrandintr   r   )start_days_agoend_days_agodeltas      r   random_dater      s$    NN<8E8iU+++r   Engineeringz'Software engineering and platform teams)namedescription	Marketingz!Brand, growth, and communications
Operationsz*Business operations and process excellenceFinancezFinancial planning and analysisHRzPeople and cultureProductzProduct management and design))zSara Al-Mansoorir   )zKhalid Rahmanr   )zAhmed Bashirr   )zRania Faroukr   )zYusuf Qasimr   )zNoura Saeedr   )zTariq Al-Hassanr   )zDina Mahmoudr   )zFatima Hassanr"   )zNadia Karimr"   )zSalim Darwishr"   )zHuda Nasserr"   )zZainab Othmanr"   )z
Omar Yusufr#   )z
Rami Saeedr#   )zMariam Khalilr#   )zFaisal Al-Tamimir#   )zSamira Jaberr#   )z
Layla Noorr$   )zHassan Malikr$   )zAisha Rashidr$   )zBilal Hamdanr$   )zMona El-Aminr%   )zJamal Barakatr%   )zWafa Suleimanr%   )zKareem Haddadr%   )z	Lina Tahar&   )zAmmar Zakariar&   )zRana Ismailr&   )zSami Al-Farsir&   Novicez#64748bu   🌱)r    min_xpcoloricon
sort_orderExplorer   z#0ea5e9u   🔍   Practitioneri  z#8b5cf6u   ⚡   Advocatei   z#f59e0bu   🔥   Championi  z#ef4444u   🏆   	Visionaryi  z#ec4899u   👑   zFirst Stepsu   🚀
completionactivities_completedcount)r    r*   categorycondition_typecondition_valuer+   zDedicated Learneru   📚
   Bookwormu   📖category_complete_allr:   readingzCourse Collectoru   🎓category_countcourse)r:   r9   Hackerspecialhackathon_countzHackathon Veteranu   🏅zRising Staru   ⭐xpxp_threshold	thresholdi,     zAI Champion   Trailblazer	   z	Udemy Prou   🎯platform_countudemy)platformr9   zMulti-Tool Masteru   🛠️
multi_tool	min_tools   zCopilot Power Useru   🤖copilot_power_usermin_apps   z	Quiz Whizu   🧠quiz_perfect   zContent Consumeru   👀content_consumer   zAgent Builderu   🏗️agent_builder   Contributoru   🤝contributor   z!ChatGPT for Business Productivity   beginnerchatgptproductivity)titler:   rO   xp_valueestimated_duration_minutes
difficulty
trust_tiertagszAI Fundamentals for Everyonelinkedin_learning   h  aifundamentalszPrompt Engineering Mastery   intermediatepromptsengineeringzAI in Project Managementx   pmzMachine Learning Fundamentalscourserai  advancedmlzdata-sciencezMicrosoft Copilot Deep Divevivacopilotm365DWA AI Strategy 2026 (Slides)internal2      strategy)rc   r:   rO   rd   xp_open_pctre   rg   rh   AI Ethics WhitepaperK   -   ethicsRAG Architecture Guide (PDF)<   (   ragarchitecturezPrompt Library Best Practices   z Intro to Copilot Studio (Stream)videostreamP   zcopilot-studio)rc   r:   rO   rd   re   rg   rh   zBuilding AI Agents Tutoriald   agentsQ4 2025 AI Hackathon	hackathon)rc   r:   rO   rd   rg   rh   Prompt-a-thon February 2026AI Innovation Day Q2 2026   
innovationzCopilot in Teams WorkshopworkshopteamszAI for Non-Technical Staffz"Microsoft 365 Copilot Active Usage
tool_usagem365_copilotTmonthly)rc   r:   rO   rd   is_recurringrecurrence_periodrg   zClaude Active UsageclaudezGenSpark Active UsagegensparkzGitHub Copilot Active Usagegithub Google AI Essentials CertificatecertificationgooglezPrompt Library Contributioncontribution)rc   r:   rO   rd   rg   zBuilt Copilot Agentagent_creationzMicrosoft 365 Copilotapi)r    display_name	sync_typesync_interval_minutespurview_auditzMicrosoft Purview Audit Logsviva_learningzMicrosoft Viva LearningzUdemy Businessi  zLinkedIn Learninggithub_copilotzGitHub Copiloti  GenSparkexcel_import)r    r   r   zClaude (Anthropic)c                    K   ddl m}   | dgd      }t        j                         4 d{   }|j	                  t
        j                  j                         d{    |j	                  t
        j                  j                         d{    ddd      d{    t               4 d{   }t        d       i }t        D ]&  }t        di |}|j                  |       |||d   <   ( |j                          d{    t        d	       t        D ]  }|j                  t!        di |        |j                          d{    t        d
       t"        D ]'  }|j                  t%        di |dd|d    di       ) |j                          d{    t        d       i }	t'        t(              D ]  \  }
\  }}|j+                         d   j-                         }|j+                         d   j-                         }| d| d}t/        dd|
z    ||||   j0                  |
dk(  rdn|
dk  rdnd|j3                  d      d      }|j                  |       ||	|<    |j                          d{    t        d       i }t4        D ]H  }t7        di |j9                         D ci c]  \  }}||
 c}}}|j                  |       |||d   <   J |j                          d{    t        d       t4        D cg c]  }|d   dk(  s| }}t'        |      D ]  \  }
}||d      }t;        |j0                  d |
d!z   d"d#|j<                  j-                         j?                  d$d%       d&|j<                  d'|j<                  v rd(nd)|j<                  v rd*nd+d,tA        d-d.      tC        jD                  d/d0      1      }|j                  |        |j                          d{    t        d2       d3d4d5g d6d!d7d8g d9d!d7d:g d;d!d7gd<d=d>d?g d@d!d7dAg dBdCd7dDg dEd!d7gd<dFdGdHg dId!d7dJg dKd!d7dLg dMd!d7dNg dOd!d7gd<g}|D ]r  }|jG                  |dP         }|stI        |j0                  |d   dQ|dR   S      }|j                  |       |j                          d{    |j0                  |_%        t t        dT       tM        |	jO                               }t4        D cg c]  }|jG                  dU      r| }}t4        D cg c]  }|jG                  dU      s| }}|D ]j  }t(        D cg c]  \  }}||jP                  k(  s| c}}d   }|dVv rdWn|dXv rdYndZ}tC        jR                  |tU        tW        |      |z        [      } | D ]  }!||!d      }tC        jX                  d\d]gd^dZg_      d   }"tA        d`d/      }#|!jG                  dad!      }$|"d\k(  r|jZ                  nd}%|"d\k(  r|j\                  dbk  r|jZ                  }%t_        |j0                  |j0                  |"|"d\k(  rdbntC        jD                  dcdd      |#ta        tC        jD                  d!de      f      z
  |"d\k(  r|#nd|%|$dCk  rdgndh|$i	      }&|j                  |&        m tc        dj      D ]  }'te               ta        d.|'z  f      z
  jg                  dk      }(|D ]  }!||!d      }dl|!d   v rdmndn})tC        jR                  |tU        tW        |      |)z        [      }*|*D ]  }t_        |j0                  |j0                  d\dbtA        d.|'d!z   z  d.|'z  d!z         |jZ                  |!jG                  da      d!k(  rdgndo|!jG                  dad!      |(p	      }&|j                  |&          |j                          d{    t        dq       |D ]  }ddrl4m5}+m6}, |jo                   |,|+jq                  |+js                  t^        jt                        d            jw                  t^        jx                  |j0                  k(  t^        jz                  d\k(               d{   }-|-j}                         }.|.|_?        |jo                   |,|+jq                  |+js                  t^        jt                        d            jw                  t^        jx                  |j0                  k(  t^        jz                  d\k(  t^        j                  dCk               d{   }/|/j}                         |_A        t        t              D ]  }0|.|0ds   k\  s|0d   |_C           |j                          d{    t        dt       t4        D cg c]  }|d   duk(  s| }1}dvt        dwdxdy      d\dzd{d|t        d}dCdc      d\d~d{dt        d}dd      ddzd{g}2t'        |2      D ]J  \  }
}3|jG                  |1|
   d         }t        d|r|j0                  ndddd|3}4|j                  |4       L |j                          d{    t        d       t        D ]{  }5t        |5d   |5d   |5d   d|5jG                  dd      |5d   dk(  rtA        djd      nd|5d   dk(  rdnd|5d   dk(  rtC        jD                  dd      nd      }6|j                  |6       } |j                          d{    t        d       |jo                   ,t              jw                  t        j                  dk(               d{   }7|7j                         j                         }8|8dd D ]  }6tc        dC      D ]  }9t        |6j0                  tC        j                  g d      tA        dd!      tA        dd!      tC        jD                  dyd      tC        jD                  dCd      tC        jD                  d/dy      d      }:|j                  |:         t        d       |tC        jD                  dyd0         };|j                  t        |;j0                  dd|;jP                   d             |j                  t        |;j0                  dd|;jP                   d             |tC        jD                  d/de         }<|d   }=|j                  t        |<j0                  dd|<jP                   dd|=j0                  tA        d/d!      d             t        d       |jG                  d      }>|>r|tC        jD                  ddc         }?t_        |?j0                  |>j0                  ddbtA        ddC      ddhdjd	      }&|j                  |&       |j                          d{    |j                  t        |&j0                  |?j0                  ddd             t        d       tc        d      D ]	  }@tC        j                  |      }tC        jX                  g dg d_      d   }AtC        j                  tM        |jO                                     }t        |j0                  |A|Adk(  r|j<                  ndAdk(  r*tC        j                  t"        D cg c]  }|d   	 c}      ndAdk(  r*tC        j                  t        D cg c]  }|d   	 c}      nddtA        d.d            }B|j                  |B        |j                          d{    t        dtW        |       dtW        t4               d       t        d       ddd      d{    y7 7 7 7 # 1 d{  7  sw Y   xY w7 7 g7 "7 7 c c}}w 7 c c}w 7 7 
c c}w c c}w c c}}w 7 7 07 7 ,c c}w 7 h7 7 y7 &c c}w c c}w 7 7 # 1 d{  7  sw Y   yxY ww)zMain seed function.r   )CryptContextbcryptauto)schemes
deprecatedNu   🌱 Seeding departments...r    u   🌱 Seeding levels...u   🌱 Seeding badges...r!   z	Earn the z badgeu   🌱 Seeding employees....z@dwa.aezDWA-i  adminr6   	team_leademployeedemo123T)employee_idemail	full_namedepartment_idrolepassword_hash	is_activeu   🌱 Seeding activities...rc   u   🌱 Seeding tracked links...r:   r@   readr   03dz-https://dwa.sharepoint.com/sites/ai-hub/docs/ -z.pdfPDFpdfSlidespptxarticlezAI Adoptionr   r}   r4      )activity_id
short_codedestination_urlrc   content_typeshared_in_channel	shared_atclick_countu   🌱 Seeding quizzes...zAI Strategy 2026 Quizrz   z0What is DWA's primary AI adoption goal for 2026?)zCost cuttingzEnterprise-wide AI fluencyzReplace all jobsz	Build AGI)questionoptionscorrect_indexz)Which tool is DWA's primary AI assistant?)ChatGPTzMicrosoft CopilotGeminiClaudez'What metric tracks AI adoption success?)zRevenue onlyzActive usage + skill growthzHeadcount reductionzPrompt count)rc   activity	questionszAI Ethics Quizr   z&What is the main concern with AI bias?)SpeedzUnfair outcomes for groupsCost
Complexityz-Who is responsible for ethical AI use at DWA?)zOnly ITz
Only legalEveryonezOnly managementr.   z-What should you do if AI output seems biased?)z	Ignore itzReport and reviewzUse it anywayz	Delete itzRAG Architecture Quizr   zWhat does RAG stand for?)zRapid AI GenerationzRetrieval Augmented GenerationzReal-time AI GatewayzRandom Answer Generatorz What is the main benefit of RAG?)zFaster trainingz*Grounded responses with less hallucinationz
Lower costz	Better UIz!What feeds into the RAG pipeline?)zOnly the promptzA vector database of documentszRandom internet datazUser history onlyz&RAG is best suited for which use case?)zImage generationzEnterprise knowledge Q&AzMusic compositionzVideo editingr   F   r   )r   rc   passing_score_pctr   u   🌱 Seeding completions...r   )r   r&   g?)r"   r#   gffffff?皙?)k	completedin_progressg?)weightsr   rg   r   r   r   rY   r   api_syncself_reported)	user_idr   statusprogress_pct
started_atcompleted_at
xp_awardedsourcerg   r0   z%Y-%mCopilotffffff?g?r   )	r   r   r   r   r   r   r   rg   
period_keyu   🌱 Calculating XP totals...)funcselectr(   u!   🌱 Seeding hackathon details...r   r   i  rR   r[   r^   )r    
event_dater   duration_hoursr   i  rJ   r   rU   upcomingzDWA HQ, Ajmanr|   )r   locationmax_participantsu#   🌱 Seeding data source configs...r   r   r   rk   r   successneverr=   )r    r   r   
is_enabledr   last_sync_atlast_sync_statuslast_sync_recordsu   🌱 Seeding demo sync jobs...r2   )r   r   r   partialrI   r   	scheduled)data_source_idr   r   r   records_processedrecords_createdrecords_updatedtriggered_byu   🌱 Seeding anomaly flags...speed_violationwarningzF completed 'Machine Learning Fundamentals' (8hr course) in 12 minutes.)r   	flag_typeseverityr!   burst_violationz( completed 7 activities on a single day.u]    completed a 4hr course in 45 minutes — reviewed and approved (attended in-person session).z@Attended instructor-led session, course auto-marked as complete.)r   r  r  r!   resolvedresolved_byresolved_atresolution_noteu%   🌱 Seeding verification requests...r   pending_verificationz%https://coursera.org/verify/DEMO12345)	r   r   r   r   r   r   r   rg   evidence_urlcertificatez+Completed Google AI Essentials on Coursera.)completion_idr   r  evidence_typenotesu   🌱 Seeding activity feed...)r7   badge_earnedlevel_up)r   r   g?r7   r  r  )activity_title
badge_name	new_level)r   
event_type
event_data
created_atu   ✅ Seeded z employees, z4 activities, data sources, badges, levels, and more!z1   Admin login: sara.al-mansoori@dwa.ae / demo123r   )Qpasslib.contextr   r
   beginrun_syncr   metadatadrop_all
create_allr	   printDEPARTMENTS
DepartmentaddflushLEVELS_DATALevelBADGES_DATABadge	enumerate	EMPLOYEESsplitlowerUseridhashACTIVITIES_DATAActivityitemsTrackedLinkrc   replacer   r   r   getQuizquiz_idlistvaluesr   sampleintlenchoicesrd   r   ActivityCompletionr   ranger   strftime
sqlalchemyr   r   executecoalescesumr   wherer   r   scalartotal_xprg   verified_xpreversedcurrent_levelr   	HackathonDATA_SOURCESDataSourceConfigr   scalarsallSyncJobchoiceAnomalyFlagVerificationRequestActivityFeedcommit)Cr   pwd_contextconndbdept_mapddeptlbuser_mapir    	dept_namefirstlastr   useractivity_mapar   vactreading_activitieslink	quiz_dataqdquiz	all_usersnon_recurring	recurringncompletion_rateactivities_to_completea_datar   	comp_datetrustrF   compmonth_offsetperiod
usage_rateactive_usersr   r   resulttotalresult2lvlhack_activitieshackathon_datahdhackdsconfigconfigs_resultapi_configsjjobflagged_userresolved_user
admin_usercert_activitypending_user_r  feedsC                                                                      r   seedr     sI    ,zfEK||~~mmDMM22333mmDMM44555 ~ "+,A??DFF4L"&HQvY  hhj&'AFF5:1: hhj&'AFF5H1HIai[*GHI hhj)*$-i$8 A iJJLO))+E::<#))+DgQtfG,E"46(O&y144 !QWAE[z)..y9D FF4L!HTN %9 hhj*+ A:qwwy9ytq!ady9:CFF3K'*L7$ ! hhj-.)8WAAjMY<VaW01DAqqz*CFF!!A#c+"OPSPYPYP_P_PaPiPijmorPsOttx yii&+syy&8UTWT]T]H]fcl"/%b"-"NN1b1	D FF4L 2 hhj'(-;ZO  ]l  @  AH  VJ  ]^  _F  Tj  }~  j 
 '4JE  SP  cd  eL  ZR  ef  gL  ZZ  mn  oZ 
 .;Y7  Eq  DE  F?  Mi  |}  ~@  Np  CD  EE  Si  |}  ~	i 
	$ B""2j>2C #W+&( o	 thhj  "gg  	+,*+	$3QOq155;POQ /I11553HQ	I D"+C)$!QqDNN/BA)CAFD&*.H&HdVZ^yVyd  @CO%+]]=CMHZ]lHlDm%n"0"6'?3m(DsTWjYZ[\'A.	

<3%+{%:S\\[(S__s-BB) GG #!(.+(=6>>RTVXCY(9&..B:O+PP.4.C!).!:$
 t+ 1 < "!HLh\0A!BBLLWUF#"6'?3$-$@Sc
%}}Y#c)nz>Y:Z[(D- $$'FF*%(%0|a7G1H"|J[^_J_%`#&<<-3ZZ-E-JzP^#)::lA#>#)
D FF4L )	 $ %& hhj 	-.D/::t}}TXX.@.K.K%LaPQWW&..$''9&--< F MMOE!DMJJt}}TXX.@.K.K%LaPQWW&..$''9&--<&11Q6 G  '~~/D  ,CM)),VD& -+ 2 hhj12&5Vo:+9U1oV+4b";MYdxz{2$tQPRBS_j~  A0T1b@Q]g{}~

 ~.EAr""?1#5g#>?C &)CFFt(!# 	D FF4L / hhj34B%Z/[/&(ff-Dc&J24[/U2J[A.PT.0o.FG<>{Ou<T&..R"8Z[	F FF6N  hhj./!zz&1A*B*H*HIYIcIcglIl*mnn$,,.224!"1oF1X#)99!==)UV*1a0!,Q!2&,nnR&<$*NN1b$9$*NN1b$9!,	 s  & 	-. B!78
{ OO''1122xy	
 	 	{ OO''1122Z[	
 	 "&..B"78q\

{!$$'(223  4Q  R"#Aq)^	
 		 	56$(()KL$V^^B%;<L%$),,- (Q/&D
D FF4L((*FF&"gg$D+C  	-.rA==+D:' J --\%8%8%: ;<C%3=3MciiSWU_cqUq&--K0PKq6K0P"Qw{T^blTl;/O;a&	;/O!Prv
 'r1-	D FF4L# & iikC	N+<O8L7M  NB  C  	DACc	 	 35 ~~~  	
 	
 	& 	
 : 	 X 	> !
 RI D` 	 	 W 	 	 ov , 1Q/O 	_	 se  *}-}}
0}}}}1})25A},A}/A }2!C }546}847}>8~~!C:~;B=A ~	A~~
)~ ~~
-~
1I~B /~0B0 ~"!3$9~%:~(~(#B"~-B&,~0-A:~3;I~6C/ ~9$0~><A>?76
}}}&}}&!	,/258	"%(0369__main__)r   r   )__doc__asyncior   uuidr   r   r   r   rB  r   sqlalchemy.ext.asyncior   app.databaser	   r
   r   
app.modelsr   r   r"  r+  r&  r(  r1  rM  r  __name__runr   r   r   <module>r     sd      8 8  / 4 4 &, +TU)LM*VW'HI"67'FG	4 YVWX3FZ[\sY]^_3FZ[\4)V[\]D9f\]^ FXn  EL  NO  DP  `a  b &l^t  KR  TV  JW  gh  i\Ul  CM  OX  BY  ij  k\]m  PX  cd  Ce  uv  wu)O`v}  @A  vB  RS  T &i[l  CJ  LM  BN  ^_  `Et~s~  AD  sE  UV  WFP^t  BE  tF  VW  XFP^t  BF  tG  WX  Y&lVf  IP  [\  |]  mo  p )^j  AL  NO  @P  `b  c!6y\p  GQ  ST  FU  eg  h&lVd  {B  DE  zF  VX  Y\]o  FM  OQ  ER  bd  eiYZi  A  QS  TF	Ubx  BC  xD  TV  W!* 2xU\jm  NQ  ak  {|  GP  R`  Fa  b,(Pcqt  UX  hr  BC  NR  Tb  Mc  d*gcf  GJ  Zh  xy  DM  O\  C]  ^(hL_mp  QT  dn  ~  JN  PT  IU  V-8Q[il  MP  `j  z{  FJ  LZ  E[  \+vcf  GJ  Zh  xy  DM  OU  CV  W-9R\jl}  `b  rs  ~H  }I  J$)actv  WY  ij  u}  t~  ,)Q[ik|~  _a  qr  }B  DR  |S  T-9R\jl}  `b  rs  ~G  }H  I0gS[ik  LN  ^_  jz  i{  |+hdg  HJ  Z[  fn  eo  p$+:cfvw  CN  BO  P+R\jm}~  JU  W`  Ia  b){PZhk{|  HS  Ua  Gb  c)zzgj  KM  ]^  ir  t{  h|  }*
PZhj  KM  ]^  is  ht  u2Zhvx  KO  fo  @  A#8acuy  QZ  jk  l%<Zegy}  U^  no  p+S[ik  ~B  Yb  rs  t0o[esv  GH  Sb  dl  Rm  n+U_mo  @A  B#1A~kn~  AA!H -DSXsvw.L[`{~.GV[vyz&6Uehi 2ETYtwx/?enrs.Q';.Y	zDz	 zGKK r   