version: '3'

tasks:
  go:gen:dal:
    summary: Runs GORM Gen for crud generating
    dir: internal/gen
    sources:
      - ../models/*.go
    generates:
      - ../dal/*.go
    cmds:
      - go run gen.go
    method: none

  go:gen:crudgen:
    summary: Runs crudgen for crud generating
    sources:
      - internal/models/*.go
    generates:
      - internal/services/*.go
    deps:
      - go:gen:dal
    cmds:
      - crudgen -p internal
    method: none

  go:mod:tidy:
    summary: Runs `go mod tidy`
    internal: true
    generates:
      - go.sum
    sources:
      - go.mod
    cmds:
      - go mod tidy

  install:frontend:deps:
    summary: Install frontend dependencies
    dir: frontend
    sources:
      - package.json
      - package-lock.json
    generates:
      - node_modules/*
    preconditions:
      - sh: npm version
        msg: "Looks like npm isn't installed. Npm is part of the Node installer: https://nodejs.org/en/download/"
    cmds:
      - npm install

  build:frontend:
    summary: Build the frontend project
    dir: frontend
    sources:
      - "**/*"
    generates:
      - dist/*
    deps:
      - task: install:frontend:deps
      - task: generate:bindings
    cmds:
      - npm run build -q

  generate:bindings:
    summary: Generates bindings for the frontend
    sources:
      - "**/*.go"
      - go.mod
      - go.sum
    generates:
      - "frontend/bindings/**/*"
    cmds:
      - wails3 generate bindings -f '{{.BUILD_FLAGS}}'{{if .UseTypescript}} -ts{{end}}

  generate:icons:
    summary: Generates Windows `.ico` and Mac `.icns` files from an image
    dir: build
    sources:
      - "appicon.png"
    generates:
      - "icons.icns"
      - "icons.ico"
    cmds:
      - wails3 generate icons -input appicon.png

  dev:frontend:
    summary: Runs the frontend in development mode
    dir: frontend
    deps:
      - task: install:frontend:deps
    cmds:
      - npm run dev -- --port {{.VITE_PORT}} --strictPort

  update:build-assets:
    summary: Updates the build assets
    dir: build
    cmds:
      - wails3 update build-assets -name "{{.APP_NAME}}" -binaryname "{{.APP_NAME}}" -config config.yml -dir .