# Codecov configuration for Timeline Studio
# https://docs.codecov.com/docs/codecov-yaml

codecov:
  max_report_age: false  # Disable report age check

coverage:
  status:
    project:
      default:
        target: 80%
        threshold: 2%
        base: auto
      frontend:
        target: 75%
        threshold: 2%
        flags:
          - frontend
      rust:
        target: 80%
        threshold: 2%
        flags:
          - rust
    patch:
      default:
        target: 70%
        threshold: 5%

# Component-based coverage tracking - each feature is a separate component
component_management:
  default_rules:  # default rules that will be inherited by all components
    statuses:
      - type: project # in this case every component that doens't have a status defined will have a project type one
        target: auto
        branches:
          - "!main"

  individual_components:
    # Frontend Features - каждая фича отдельный компонент
    - component_id: frontend-timeline
      name: "Timeline"
      paths:
        - "src/features/timeline/**"
      flag_regexes:
        - "frontend"
        
    - component_id: frontend-video-player
      name: "Video Player"
      paths:
        - "src/features/video-player/**"
      flag_regexes:
        - "frontend"
        
    - component_id: frontend-media-studio
      name: "Media Studio"
      paths:
        - "src/features/media-studio/**"
      flag_regexes:
        - "frontend"
        
    - component_id: frontend-export
      name: "Export"
      paths:
        - "src/features/export/**"
      flag_regexes:
        - "frontend"
        
    - component_id: frontend-video-compiler
      name: "Video Compiler"
      paths:
        - "src/features/video-compiler/**"
      flag_regexes:
        - "frontend"
        
    - component_id: frontend-ai-chat
      name: "AI Chat"
      paths:
        - "src/features/ai-chat/**"
      flag_regexes:
        - "frontend"
        
    - component_id: frontend-recognition
      name: "Recognition"
      paths:
        - "src/features/recognition/**"
      flag_regexes:
        - "frontend"
        
    - component_id: frontend-browser
      name: "Browser"
      paths:
        - "src/features/browser/**"
      flag_regexes:
        - "frontend"
        
    - component_id: frontend-media
      name: "Media"
      paths:
        - "src/features/media/**"
      flag_regexes:
        - "frontend"
        
    - component_id: frontend-effects
      name: "Effects"
      paths:
        - "src/features/effects/**"
      flag_regexes:
        - "frontend"
        
    - component_id: frontend-filters
      name: "Filters"
      paths:
        - "src/features/filters/**"
      flag_regexes:
        - "frontend"
        
    - component_id: frontend-transitions
      name: "Transitions"
      paths:
        - "src/features/transitions/**"
      flag_regexes:
        - "frontend"
        
    - component_id: frontend-style-templates
      name: "Style Templates"
      paths:
        - "src/features/style-templates/**"
      flag_regexes:
        - "frontend"
        
    - component_id: frontend-templates
      name: "Templates"
      paths:
        - "src/features/templates/**"
      flag_regexes:
        - "frontend"
        
    - component_id: frontend-subtitles
      name: "Subtitles"
      paths:
        - "src/features/subtitles/**"
      flag_regexes:
        - "frontend"
        
    - component_id: frontend-resources
      name: "Resources"
      paths:
        - "src/features/resources/**"
      flag_regexes:
        - "frontend"
        
    - component_id: frontend-app-state
      name: "App State"
      paths:
        - "src/features/app-state/**"
      flag_regexes:
        - "frontend"
        
    - component_id: frontend-project-settings
      name: "Project Settings"
      paths:
        - "src/features/project-settings/**"
      flag_regexes:
        - "frontend"
        
    - component_id: frontend-user-settings
      name: "User Settings"
      paths:
        - "src/features/user-settings/**"
      flag_regexes:
        - "frontend"
        
    - component_id: frontend-modals
      name: "Modals"
      paths:
        - "src/features/modals/**"
      flag_regexes:
        - "frontend"
        
    - component_id: frontend-keyboard-shortcuts
      name: "Keyboard Shortcuts"
      paths:
        - "src/features/keyboard-shortcuts/**"
      flag_regexes:
        - "frontend"
        
    - component_id: frontend-camera-capture
      name: "Camera Capture"
      paths:
        - "src/features/camera-capture/**"
      flag_regexes:
        - "frontend"
        
    - component_id: frontend-voice-recording
      name: "Voice Recording"
      paths:
        - "src/features/voice-recording/**"
      flag_regexes:
        - "frontend"
        
    - component_id: frontend-music
      name: "Music"
      paths:
        - "src/features/music/**"
      flag_regexes:
        - "frontend"
        
    - component_id: frontend-options
      name: "Options"
      paths:
        - "src/features/options/**"
      flag_regexes:
        - "frontend"
        
    - component_id: frontend-top-bar
      name: "Top Bar"
      paths:
        - "src/features/top-bar/**"
      flag_regexes:
        - "frontend"
        
    - component_id: frontend-i18n
      name: "i18n"
      paths:
        - "src/i18n/**"
      flag_regexes:
        - "frontend"
        
    # Backend Features - 4 основные фичи
    - component_id: backend-video-compiler
      name: "Video Compiler (Rust)"
      paths:
        - "src-tauri/src/video_compiler/**"
      flag_regexes:
        - "rust"
        
    - component_id: backend-media
      name: "Media Processing (Rust)"
      paths:
        - "src-tauri/src/media/**"
      flag_regexes:
        - "rust"
        
    - component_id: backend-recognition
      name: "Recognition System (Rust)"
      paths:
        - "src-tauri/src/recognition/**"
      flag_regexes:
        - "rust"
        
    - component_id: backend-core
      name: "Core Backend (Rust)"
      paths:
        - "src-tauri/src/*.rs"
        - "src-tauri/src/commands/**"
        - "src-tauri/src/state/**"
        - "src-tauri/src/language.rs"
      flag_regexes:
        - "rust"

# Ignore patterns
ignore:
  - "node_modules"
  - "dist"
  - "build"
  - "scripts"
  - "docs"
  - "e2e"
  - "e2e/**"
  - "tests/e2e/**"
  - "**/*.e2e.*"
  - "**/*.spec.*"
  - "playwright/**"
  - "cypress/**"
  - "examples"
  - "promo"
  - "docs-ru"
  - "coverage"
  - "*.config.js"
  - "*.config.ts"
  - "**/*.d.ts"
  - "playwright.config.*"
  - "vitest.config.*"
  - "vite.config.*"
  - "next.config.*"
  - "tailwind.config.*"
  - "postcss.config.*"
  - "src/test/**"
  - "src/**/__mocks__/**"
  - "src/**/__tests__/**"
  - "src/components/ui/**"  # shadcn/ui components
  - "src/features/media-studio/services/tauri-mock-provider.tsx"  # Mock provider for non-Tauri environments
  - "src/features/media-studio/hooks/use-auto-load-media.ts"  # Disabled auto-loading functionality
  - "src/features/media-studio/hooks/use-auto-load-resources.ts"  # Disabled auto-loading functionality
  - "src/lib/utils.ts"  # Utility functions from shadcn/ui
  - "src/app/**"  # Next.js app directory (mostly routing)
  - "src/pages/**"  # Next.js pages (if any)
  - "**/*.stories.tsx"  # Storybook stories
  - "**/constants.ts"  # Constants files (usually just exports)
  - "**/constants/**"  # Constants directories
  - "**/types.ts"  # Type definition files
  - "**/types/**"  # Type directories (interfaces only)
  - "src/styles/**"  # CSS/styling files
  - "**/*.css"  # CSS files
  - "**/*.scss"  # SCSS files
  - "src/i18n/locales/**"  # Translation JSON files
  - "**/index.ts"  # Re-export index files (usually just exports)
  - "**/*.config.json"  # Configuration JSON files
  - "src/features/**/lib/**"  # Library files with minimal logic
  - "src/components/icons/**"  # Icon components (SVG wrappers)
  - "**/fixtures/**"  # Test fixtures
  - "**/fixtures.ts"  # Test fixture files
  - "target/**"  # Rust build artifacts
  - "src-tauri/target/**"

# Flag management for different test runs
flag_management:
  default_rules:
    carryforward: true

# Comment configuration
comment:
  layout: "reach,diff,flags,tree,reach"
  behavior: default
  require_changes: false
  require_base: no
  require_head: yes
  branches:
    - "main"
    - "develop"

# GitHub checks
github_checks:
  annotations: true