# Copyright 2020 Logic and Optimization Group, Universitat de Lleida. All Rights Reserved.
FROM continuumio/miniconda3:4.8.2
LABEL author="LOG"
EXPOSE 80

ENV QUEUE_DB_DIR /opt/sentinelDB
ENV SAT_DOWN_DIR /opt/sat_down_dir/
ENV SAT_PROC_DIR /opt/sat_proc_dir/

ENV DB_USER sentinelDL
ENV DB_NAME sentinelQueue

# create an account at https://scihub.copernicus.eu/dhus/#/self-registration
# and change USERNAME and USERPASS below
ENV COPERNICUS_USER USERNAME
ENV COPERNICUS_PASS USERPASS
ENV COPERNICUS_URL "https://apihub.copernicus.eu/apihub/"

RUN touch /opt/serv_env_vars
RUN echo "QUEUE_DB_DIR='${QUEUE_DB_DIR}'" >> /opt/serv_env_vars
RUN echo "SAT_DOWN_DIR='${SAT_DOWN_DIR}'" >> /opt/serv_env_vars
RUN echo "SAT_PROC_DIR='${SAT_PROC_DIR}'" >> /opt/serv_env_vars
RUN echo "DB_USER='${DB_USER}'" >> /opt/serv_env_vars
RUN echo "DB_NAME='${DB_NAME}'" >> /opt/serv_env_vars
RUN echo "COPERNICUS_USER='${COPERNICUS_USER}'" >> /opt/serv_env_vars
RUN echo "COPERNICUS_PASS='${COPERNICUS_PASS}'" >> /opt/serv_env_vars
RUN echo "COPERNICUS_URL='${COPERNICUS_URL}'" >> /opt/serv_env_vars

### Install required packages
RUN apt-get update
RUN apt-get install -y nginx logrotate

RUN conda install -y Flask=1.1.2 connexion=2.6
RUN pip install connexion[swagger-ui]
RUN conda install -y -c conda-forge uwsgi=2.0.18 postgresql=12.2 psycopg2=2.8.5
RUN conda install -y -c conda-forge numpy=1.18.1 pyproj=2.6 rasterio=1.1.3 shapely=1.7
RUN mkdir -p /var/log/uwsgi/

### Configure Postgres
RUN adduser postgres --disabled-password --gecos ""
RUN echo "postgres:postgres" | chpasswd
RUN mkdir -p ${QUEUE_DB_DIR}
RUN chown postgres ${QUEUE_DB_DIR}
RUN mkdir -p /var/log/postgresql
RUN chown postgres /var/log/postgresql
RUN su -c "initdb -A trust -D ${QUEUE_DB_DIR}" postgres

COPY scripts/conf/create_db.sql /home/postgres/

RUN su -c "pg_ctl start -D ${QUEUE_DB_DIR}" postgres && \
    su -c "createuser ${DB_USER}" postgres && \
    su -c "createdb --owner=${DB_USER} ${DB_NAME}" postgres  && \
    psql -f /home/postgres/create_db.sql -U ${DB_USER} ${DB_NAME} && \
    su -c "pg_ctl stop -D ${QUEUE_DB_DIR}" postgres

### Copy App files
RUN mkdir -p ${SAT_DOWN_DIR}
RUN mkdir -p ${SAT_PROC_DIR}

WORKDIR /sentinelApp
COPY scripts/conf/wsSentinel_uwsgi.ini .
COPY wsDownloader ./wsDownloader

RUN mkdir execDownloader
COPY execDownloader/downloaderMain.py ./execDownloader/
COPY execDownloader/downloaderSecondary.py ./execDownloader/
COPY execDownloader/bin/* ./execDownloader/

WORKDIR /

COPY scripts/conf/initd_uwsgi /etc/init.d/uwsgi
COPY scripts/conf/initd_postgresql /etc/init.d/postgresql
COPY scripts/conf/nginx_wsSentinel /etc/nginx/sites-available/default
RUN sed -i "s%VAR_DIR_VAR%${SAT_PROC_DIR}%g" /etc/nginx/sites-available/default
COPY scripts/conf/SentQueue /etc/logrotate.d/
RUN chmod 644 /etc/logrotate.d/SentQueue
RUN chmod 755 /etc/init.d/uwsgi
RUN chmod 755 /etc/init.d/postgresql

### Clean up APT when done.
RUN apt-get clean
RUN rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
RUN conda clean -a

### Define volumes
VOLUME ${QUEUE_DB_DIR}
VOLUME ${SAT_DOWN_DIR}
VOLUME ${SAT_PROC_DIR}

### ENTRYPOINT // CMD
COPY scripts/entrypoint.sh /
RUN chmod +x entrypoint.sh

ENTRYPOINT ["/entrypoint.sh"]
