version: "3.9"
services:

  #Base de donnée mysql de la borne sur laquelle est stockée tous les avis et les stats
  db:
    image: mysql:latest
    container_name: db
    expose:
      - 3306
    volumes:
      - ./db:/docker-entrypoint-initdb.d
    restart: always
    healthcheck:
      test: ["CMD", "mysqladmin" ,"ping", "-h", "localhost", "-uroot"] # Command to check health.
      interval: 5s # Interval between health checks.
      timeout: 5s # Timeout for each health checking.
      retries: 20 # Hou many times retries.
      start_period: 10s # Estimated time to boot.
    environment:
      MYSQL_ROOT_PASSWORD: telereview
      MYSQL_DATABASE: telereview
  
  #Interface d'aministration pour la bdd
  phpmyadmin:
    image: phpmyadmin:latest
    restart: always
    container_name: phpmyadmin
    depends_on:
      db:
        condition: service_healthy
    environment:
      PMA_ARBITRARY: 1
      PMA_HOST: db
      PMA_USER: root
      PMA_PASSWORD: telereview
    ports:
      - 8000:80
  
  #API de gestion des avis, permet d'ajouter ou de récuperer des avis ou les stats sur les avis par des requêtes HTTP
  reviews_api:
    container_name: reviews_api
    ports:
      - 8080:8080
    environment:
      - NODE_ENV=production
      - DB_USER=root
      - DB_PASSWORD=telereview
      - DB_HOST=db
      - DB_NAME=telereview
      - PORT=8080
    depends_on:
      db:
        condition: service_healthy
    build: ./reviews_api
    restart: always

  #Serveur web de l'interface de la borne
  interface_borne:
    image: httpd:latest
    volumes:
      - ./interface_borne:/usr/local/apache2/htdocs/
    container_name: interface_borne
    ports:
      - 8888:80
  
  #Serveur web de l'interface admin
  interface_admin:
    image: httpd:latest
    volumes:
      - ./interface_admin:/usr/local/apache2/htdocs/
    container_name: interface_admin
    ports:
      - 80:80

  #Backend de la borne : scripts pythons de reconaissances video et audio
  #Envoient les infos a l'interface de la borne par websocket pour mettre a jour l'interface rapidement
  #Met a jour les avis en faisant des requêtes a l'API
  backend_reconaissance:
    build: ./backend_reconaissance
    container_name: backend_reconaissance
    restart: always
    devices:
      - /dev/video3:/dev/video0
    environment:
      - PORT=5000
      - HOST=backend_reconaissance
    ports:
      #Ce container est le serveur websocker dont le client est l'interface de la borne qui tourne dans le navigateur
      - 5000:5000
    
  video_loopback:
    build: ./video_loopback
    container_name: video_loopback
    restart: always
    devices:
      - /dev/video0:/dev/video0 
      - /dev/video2:/dev/video1 
      - /dev/video3:/dev/video2 