- name: Ensure labs project directory exists
  ansible.builtin.file:
    path: "{{ labs_project_dir }}"
    state: directory
    mode: "0755"

- name: Copy docker-compose.yml for labs
  ansible.builtin.copy:
    src: "{{ role_path }}/files/docker-compose.yml"
    dest: "{{ labs_project_dir }}/docker-compose.yml"
    mode: "0644"
  register: docker_compose_result

- name: Copy env files for labs
  ansible.builtin.copy:
    src: "{{ role_path }}/files/{{ item }}"
    dest: "{{ labs_project_dir }}/{{ item }}"
    mode: "0644"
  loop:
    - .backend_env
    - .frontend_global_env
    - .frontend_china_env
  register: env_files_result

- name: Ensure frontend logs directory exists
  ansible.builtin.file:
    path: "{{ labs_project_dir }}/frontend_logs"
    state: directory
    mode: "0755"

- name: Ensure frontend log files exist
  ansible.builtin.file:
    path: "{{ labs_project_dir }}/frontend_logs/{{ item }}"
    state: touch
    mode: "0666"
  loop:
    - global.log
    - china.log

- name: Ensure nginx conf directory exists
  ansible.builtin.file:
    path: "{{ labs_project_dir }}/nginx"
    state: directory
    mode: "0755"

- name: Copy nginx.conf for labs
  ansible.builtin.copy:
    src: "{{ role_path }}/files/nginx.conf"
    dest: "{{ labs_project_dir }}/nginx/nginx.conf"
    mode: "0644"

- name: Ensure nginx default conf directory exists
  ansible.builtin.file:
    path: "{{ labs_project_dir }}/nginx/conf.d"
    state: directory
    mode: "0755"

- name: Copy nginx-default.conf for labs
  ansible.builtin.copy:
    src: "{{ role_path }}/files/nginx-default.conf"
    dest: "{{ labs_project_dir }}/nginx/conf.d/default.conf"
    mode: "0644"

- name: Ensure backend temp directory exists
  ansible.builtin.file:
    path: "{{ labs_project_dir }}/backend_temp"
    state: directory
    mode: "0755"

- name: Login to docker registry
  community.docker.docker_login:
    registry: "{{ labs_docker_registry }}"
    username: "{{ labs_docker_username }}"
    password: "{{ labs_docker_password }}"

- name: Deploy labs docker compose stack
  community.docker.docker_compose_v2:
    project_src: "{{ labs_project_dir }}"
    state: present
    pull: always
    recreate: always
    remove_orphans: true
    wait: true

- name: Generate lab list
  ansible.builtin.command:
    cmd: "docker compose run --rm -T backend python manage.py generate_lab_list"
    chdir: "{{ labs_project_dir }}"

- name: Verify labs service is running
  ansible.builtin.uri:
    url: "http://127.0.0.1:80/health"
    method: GET
    headers:
      Host: labs.tidb.io
    status_code: 200
  retries: 10
  delay: 10
