U
    9iJ                      @   sb  d dl Zd dlZd dlmZmZmZmZmZm	Z	m
Z
mZ d dlmZ d dlZd dlmZ d dlZd dlZd dlmZ e  eeZeedddgd	 ed
de_dZdZejedZe Zdd Zdd Z dd Z!dd Z"dd Z#e$ddd Z%ej$dddgdd d! Z&ej$d"dgdd#d$ Z'e$d%d&d' Z(ej$d(dgdd)d* Z)e$d+d,d- Z*e$d.e$d/e$d0e$d1e$d2e$d3e$d4e$d5e$d6e$d7e$d8e$d9d:d; Z+e$d<d=d> Z,e$d?d@dA Z-ej$dBdgddCdD Z.e$dEdFdG Z/e$dHdIdJ Z0edKkr^ej1ddL dS )M    N)Flaskrender_templatejsonifyrequestsessionredirecturl_formake_response)CORS)datetime)load_dotenvTzhttps://kec-apps.com:443zhttps://kec-apps.com)Zsupports_credentialsZoriginsZFLASK_SECRET_KEYZkecapps_default_key_2025z/var/www/html/templatesz/var/www/htmlzmembers.csvc                  C   s|   t d} | sg S tt| dkr2tjtd}ntjtd}z&tj	|dd}|
d}|jdd	W S    g  Y S X d S )
Nuser_id
   zscriptdata.csvzscriptdata2.csvutf-8encoding recordsZorient)r   getlenstrospathjoinCSV_DIRpdread_csvfillnato_dict)r   Z
target_csvdf r!   /var/www/html/app.pyload_csv   s    

r#   c                  C   s   t jtdd} | S )Nr   r   )r   r   members_csv_path)r    r!   r!   r"   load_members_csv0   s    r%   c                 C   s>   t jtdd}||d | k }|js:|jd d |kr:dS dS )Nr   r   r   r   passwordTF)r   r   r$   emptyiloc)r   r&   r    userr!   r!   r"   check_credentials7   s
    r*   c              	   C   s   t  tjtdd}| |d jkr0W 5 Q R  dS t d}||j|d | kdf< t	||d | k j
d d r||j|d | kdf< |jtddd	 W 5 Q R X d
S )Nr   r   r   F%Y-%m-%d %H:%M:%SZ
last_loginr   Zfirst_loginindexr   T)csv_lockr   r   r$   valuesr   nowstrftimelocZisnar(   to_csvr   r    r0   r!   r!   r"   update_login_time?   s     r5   c              	   C   sr   t d tjtdd}| |d jkr0W 5 Q R  dS t d}||j|d | kdf< |j	tddd W 5 Q R X dS )	Nr   r   r   Fr+   Zlast_logoutr,   T)
r.   r   r   r$   r/   r   r0   r1   r2   r3   r4   r!   r!   r"   update_logout_timeL   s    r6   /c                   C   s   dt krtdS ttdS )Nr   z
index.htmllogin)r   r   r   r   r!   r!   r!   r"   r-   Y   s    r-   z/loginGETPOST)methodsc                  C   sX   t jdkrPt jd  } t jd  }t| |rL| td< t|  ttdS dS t	dS )Nr:   r   r&   r-   )u8   ユーザーIDまたはパスワードが違います。  z
login.html)
r   methodformstripr*   r   r5   r   r   r   )r   r&   r!   r!   r"   r8   `   s    

r8   z/logoutc                   C   s@   dt kr0tt d  t dd  tddidfS tddidfS )Nr   messageu   ログアウト成功   u   ログインしていませんr<   )r   r6   popr   r!   r!   r!   r"   logoutn   s
    rC   z/membersc                  C   sD   dt kr@t } | | d t d k ddg d}t|jddS dS )Nr   Zname1Zname2r   r   r   )ZUnauthorizedr<   )r   r%   r   r   r   )r    r)   r!   r!   r"   get_membersy   s
    "rD   z/grant_accessc                   C   s   dt d< ttdS )NTaccess_grantedconv2)r   r   r   r!   r!   r!   r"   grant_access   s    rG   z/conv2c                   C   s   t ddstdS tdS )NrE   Fzhttps://kec-apps.com:443/z
conv2.html)r   r   r   r   r!   r!   r!   r"   rF      s    rF   z/intro1z/intro2z/basic1z/basic2z/beginner1-1z/beginner1-2z/beginner1-3z
/beginner2z
/beginner3z
/beginner4z
/beginner5z
/beginner6c                  C   sp   t jd} tjt|  d}tj|s<tddidfS tt	|  d}d|j
d< d|j
d	< d
|j
d< |S )ur   
    SPA版用：完全なHTMLを返す
    キャッシュを無効化してService Workerの問題を回避
    r7   z.htmlerrorzLesson file not found  #no-cache, no-store, must-revalidateCache-Controlno-cachePragma0Expires)r   r   r?   r   r   HTML_DIRexistsr   r	   r   headers)ZpageZ	html_pathresponser!   r!   r"   render_lesson   s    


rT   z/manualc                  C   s.   t td} d| jd< d| jd< d| jd< | S )Nzmanual.htmlrJ   rK   rL   rM   rN   rO   )r	   r   rR   )rS   r!   r!   r"   manual   s
    


rU   z/get_script/<lesson>c              	   C   sv   d|  d}t jt|}t j|s<td| didfS t|ddd}t|}d	d
 |D }W 5 Q R X t|S )Nzscript z.csvrH   z
 not foundrI   r   r   )newliner   c                 S   s   g | ]}|qS r!   r!   ).0rowr!   r!   r"   
<listcomp>   s     zget_script.<locals>.<listcomp>)	r   r   r   r   rQ   r   opencsv
DictReader)Zlessonfilenamer   freaderdatar!   r!   r"   
get_script   s    
ra   z/whisperc                  C   s4   t jd } tjdd| j| dfidddd}| S )	NZaudiozhttp://127.0.0.1:8080/inferencefilez	audio/wavz0.0json)ZtemperatureZresponse_format)filesr`   )r   rd   requestsZpostr]   rc   )r^   rr!   r!   r"   whisper_api   s    
rg   z/get_api_keyc                  C   s,   t dd} | s tddidfS td| iS )uK   
    フロントエンドが fetch('/get_api_key') で呼び出す用
    ZOPENAI_API_KEYr   rH   zAPI key not foundrI   api_key)r   getenvr   )rh   r!   r!   r"   get_api_key   s    rj   z/diagnose-allc                   C   s   t dS )Nzdiagnose-all.html)r   r!   r!   r!   r"   diagnose_all   s    rk   __main__)debug)2Zpandasr   r[   Zflaskr   r   r   r   r   r   r   r	   Z
flask_corsr
   r   r   	threadingre   Zdotenvr   __name__appri   Z
secret_keyrP   r   r   r   r$   Lockr.   r#   r%   r*   r5   r6   Zrouter-   r8   rC   rD   rG   rF   rT   rU   ra   rg   rj   rk   runr!   r!   r!   r"   <module>   sx   (







	 





