o
    i#                     @   s   d dl Z d dlZd dlmZmZmZmZ d dlmZm	Z	m
Z
mZmZ edeZdd Zdd Zd	d
 Zejddgddd Zejddgddd Zejddgddd ZdS )    N)	BlueprintResponsejsonifyrequest)MYSQL_DATABASE
MYSQL_HOSTMYSQL_PASSWORD
MYSQL_PORT
MYSQL_USERnutrientlevelc                   C   s   t jtttttt jjdS )N)hostportuserpassworddatabasecursorclass)	pymysqlconnectr   r	   r
   r   r   cursors
DictCursor r   r   0/var/www/html/Server/blueprints/nutrientlevel.py	_get_conn   s   r   c                 C   sH   |   }|d |d W d    n1 sw   Y  |   d S )Na  
            CREATE TABLE IF NOT EXISTS NutrientLevelStatus (
                id INT AUTO_INCREMENT PRIMARY KEY,
                created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
                unit_id VARCHAR(16) NOT NULL,
                node_name VARCHAR(50) DEFAULT NULL,
                nutrient_low TINYINT(1) NOT NULL DEFAULT 0,
                nutrient_state VARCHAR(12) DEFAULT NULL,
                temp VARCHAR(10) DEFAULT NULL,
                humid VARCHAR(10) DEFAULT NULL,
                bat VARCHAR(10) DEFAULT NULL,
                command VARCHAR(20) DEFAULT NULL,
                mac VARCHAR(24) DEFAULT NULL,
                ip VARCHAR(45) DEFAULT NULL,
                firmware_version VARCHAR(24) DEFAULT NULL
            )
            a3  
            CREATE TABLE IF NOT EXISTS device_command (
                device_id VARCHAR(16) PRIMARY KEY,
                command VARCHAR(20) NOT NULL DEFAULT 'sleep',
                new_device_id VARCHAR(16) DEFAULT NULL,
                new_node_name VARCHAR(50) DEFAULT NULL
            )
            )cursorexecutecommit)conncurr   r   r   _ensure_tables   s   
r   c                 C   sV   t | tr| S t | ttfr| dkS t | tr)|   }|dv r#dS |dv r)dS d S )Nr   )1trueyesonlowT)0falsenooffnormalF)
isinstanceboolintfloatstrstriplower)vsr   r   r   _parse_bool8   s   

r2   z/readingPOST)methodsc                  C   s  zt jddd} | stddddfW S | d}| d}| d	}| d
}| d}| d}| d}| d}| d}	| d}
|d u sS|d u sS|d u r]tddddfW S t|trf| sptddddfW S | d d }t|tr|nd d d pd }t| d d }t| d d }t|tr|nd d d pd }t|tr|nd d d pd }|d urt| d d nd }t|tr|nd d d pd }t|	}|d u rt|
trt|
}|d u rd}|rdnd}
t }zt	| |
 }|d|f | }|r|d nd  }|dvr)d}|r:|dp3d d d nd }|rM|d pFd d d nd }|d!|||rYd"nd#|
|||||||f |ro|d$|f |ry|d%|f |d&kr|d'|f W d    n	1 sw   Y  |  W |  n|  w tjd||r|n||r|n|pd(d)d*d+}t|d,d-d.W S  tjy   tdd/dd0f Y S  ty } ztdt|dd0fW  Y d }~S d }~ww )1NTforcesilentFzInvalid or missing JSONokerror  unit_id	node_nametemphumidmacipbatfirmware_versionnutrient_lownutrient_statezMissing unit_id, temp, or humidz"unit_id must be a non-empty string    2   
      -   r#   r(   zUSELECT command, new_device_id, new_node_name FROM device_command WHERE device_id = %scommandnosleepsleeprM   rebootnew_device_idnew_node_namea*  
                    INSERT INTO NutrientLevelStatus
                        (unit_id, node_name, nutrient_low, nutrient_state, temp, humid, bat, command, mac, ip, firmware_version)
                    VALUES
                        (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)
                       r   zCUPDATE device_command SET new_device_id = NULL WHERE device_id = %szCUPDATE device_command SET new_node_name = NULL WHERE device_id = %srP   zBUPDATE device_command SET command = 'nosleep' WHERE device_id = %sNEW)r9   rL   	device_idr=   ),:)
separators   zapplication/json)statusmimetypezDatabase error  )r   get_jsonr   getr)   r-   r.   r2   r   r   r   r   fetchoner/   r   closejsondumpsr   r   Error	Exception)datar<   r=   r>   r?   r@   rA   rB   rC   rD   rE   low_boolr   r   rowcurrent_commandrQ   rR   bodyer   r   r   readingF   s   









""" "

&&

(	"rk   z/api/commandc               
   C   s(  t jdddpi } | dpd d d }| dpd  }|s,tddd	d
fS |dvr9tddd	d
fS z<t }z*t| | }|	d||f W d    n1 sYw   Y  |
  W |  n|  w td||dW S  tjy } ztdt|d	dfW  Y d }~S d }~ww )NTr5   r<   rG   rF   rL   Fzunit_id requiredr8   r;   rN   z)command must be sleep, nosleep, or rebootzqINSERT INTO device_command (device_id, command) VALUES (%s, %s) ON DUPLICATE KEY UPDATE command = VALUES(command))r9   r<   rL   r\   )r   r]   r^   r.   r/   r   r   r   r   r   r   r`   r   rc   r-   )re   r<   cmdr   r   rj   r   r   r   api_set_command   s0   

"rm   z/api/set_node_id_namec               
   C   sD  t jdddpi } | dpd d d }| dpd d d }| dp)d d d }|r6|r6|s?td	d
ddfS zDt }z4t| | }|d|||f |d|||f W d    n1 siw   Y  |	  W |
  n|
  w tddiW S  tjy } ztd	t|ddfW  Y d }~S d }~ww )NTr5   r<   rG   rF   new_unit_idrR   rH   Fz4unit_id, new_unit_id, and new_node_name are requiredr8   r;   zNUPDATE NutrientLevelStatus SET unit_id = %s, node_name = %s WHERE unit_id = %szINSERT INTO device_command (device_id, command, new_device_id, new_node_name) VALUES (%s, 'nosleep', %s, %s) ON DUPLICATE KEY UPDATE new_device_id = VALUES(new_device_id), new_node_name = VALUES(new_node_name)r9   r\   )r   r]   r^   r.   r   r   r   r   r   r   r`   r   rc   r-   )re   r<   rn   rR   r   r   rj   r   r   r   api_set_node_id_name   s6   


"ro   )ra   r   flaskr   r   r   r   configr   r   r   r	   r
   __name__bpr   r   r2   routerk   rm   ro   r   r   r   r   <module>   s    
"
e
