name: Build and deploy

on:
  push:
    branches:
      - 'main'

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - name: Notify Telegram start building
        uses: appleboy/telegram-action@master
        with:
          to: ${{ secrets.TELEGRAM_CHAT_ID }}
          token: ${{ secrets.TELEGRAM_BOT_TOKEN }}
          message: |
            🚀 Запуск сборки!
            Сервер: ${{ secrets.SERVER_NAME }}
            Репозиторий: ${{ github.repository }}

      - name: Set up QEMU
        uses: docker/setup-qemu-action@v3

      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v3

      - name: Login to Docker Hub
        uses: docker/login-action@v3
        with:
          username: ${{ secrets.DOCKERHUB_USERNAME }}
          password: ${{ secrets.DOCKERHUB_TOKEN }}

      - name: Build and push
        uses: docker/build-push-action@v5
        with:
          push: true
          tags: smallbuster/ocenka-web:latest
          build-args: |
            NEXT_PUBLIC_MAIL_USER=${{ secrets.NEXT_PUBLIC_MAIL_USER }}
            NEXT_PUBLIC_MAIL_PASS=${{ secrets.NEXT_PUBLIC_MAIL_PASS }}
            NEXT_PUBLIC_MAIL_FROM=${{ secrets.NEXT_PUBLIC_MAIL_FROM }}
            NEXT_PUBLIC_MAIL_TO=${{ secrets.NEXT_PUBLIC_MAIL_TO }}
            NEXT_PUBLIC_MAIL_SECURE_KEY=${{ secrets.NEXT_PUBLIC_MAIL_SECURE_KEY }}

      - name: Notify Telegram about success
        if: success()
        uses: appleboy/telegram-action@master
        with:
          to: ${{ secrets.TELEGRAM_CHAT_ID }}
          token: ${{ secrets.TELEGRAM_BOT_TOKEN }}
          message: |
            ✅ Сборка успешно завершена!
            Сервер: ${{ secrets.SERVER_NAME }}
            Репозиторий: ${{ github.repository }}
            Ветка: ${{ github.ref_name }}
            Коммит: ${{ github.sha }}

      - name: Notify Telegram about failure
        if: failure()
        uses: appleboy/telegram-action@master
        with:
          to: ${{ secrets.TELEGRAM_CHAT_ID }}
          token: ${{ secrets.TELEGRAM_BOT_TOKEN }}
          message: |
            ❌ Сборка проекта неудачна!
            Сервер: ${{ secrets.SERVER_NAME }}
            Репозиторий: ${{ github.repository }}
            Ветка: ${{ github.ref_name }}
            Коммит: ${{ github.sha }}
            Подробности: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}

  deploy:
    runs-on: self-hosted
    needs: build
    steps:
      - name: Notify Telegram start deploy
        uses: appleboy/telegram-action@master
        with:
          to: ${{ secrets.TELEGRAM_CHAT_ID }}
          token: ${{ secrets.TELEGRAM_BOT_TOKEN }}
          message: |
            🐳 Запуск деплоя!
            Сервер: ${{ secrets.SERVER_NAME }}
            Репозиторий: ${{ github.repository }}

      - name: Checkout repository
        uses: actions/checkout@v4

      - name: Login to Docker Hub
        uses: docker/login-action@v3
        with:
          username: ${{ secrets.DOCKERHUB_USERNAME }}
          password: ${{ secrets.DOCKERHUB_TOKEN }}

      - name: Set up Docker Compose
        run: |
          docker compose version

      - name: Stop and remove existing containers
        run: |
          docker compose -f docker-compose.yaml down || true

      - name: Pull Docker images
        run: |
          docker compose -f docker-compose.yaml pull

      - name: Start containers
        run: |
          docker compose -f docker-compose.yaml up -d

      - name: Notify Telegram about success
        if: success()
        uses: appleboy/telegram-action@master
        with:
          to: ${{ secrets.TELEGRAM_CHAT_ID }}
          token: ${{ secrets.TELEGRAM_BOT_TOKEN }}
          message: |
            ✅ Деплой успешно завершен!
            Сервер: ${{ secrets.SERVER_NAME }}
            Репозиторий: ${{ github.repository }}
            Ветка: ${{ github.ref_name }}
            Коммит: ${{ github.sha }}

      - name: Notify Telegram about failure
        if: failure()
        uses: appleboy/telegram-action@master
        with:
          to: ${{ secrets.TELEGRAM_CHAT_ID }}
          token: ${{ secrets.TELEGRAM_BOT_TOKEN }}
          message: |
            ❌ Деплой не удался!
            Сервер: ${{ secrets.SERVER_NAME }}
            Репозиторий: ${{ github.repository }}
            Ветка: ${{ github.ref_name }}
            Коммит: ${{ github.sha }}
            Подробности: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}
