{-# LANGUAGE OverloadedStrings #-}

-- |
-- Module      : Clod.FileSystem
-- Description : File system operations for the Clod application
-- Copyright   : (c) Fuzz Leonard, 2025
-- License     : MIT
-- Maintainer  : cyborg@bionicfuzz.com
-- Stability   : experimental
--
-- This module provides functionality for working with files and directories,
-- including finding, reading, copying, and checking files.
--
-- The module handles various file system tasks:
--
-- * Recursively finding files in a directory structure
-- * Detecting modified files since a given timestamp
-- * Identifying text vs. binary files
-- * Processing files according to ignore patterns
-- * Creating an optimized file structure for Claude AI integration
--
-- === File Processing Pipeline
--
-- 1. Files are discovered recursively in the repository
-- 2. Each file is checked against .gitignore and .clodignore patterns
-- 3. Binary files are excluded
-- 4. Remaining files are copied to a staging directory with optimized names
-- 5. A path manifest is created to map optimized names back to original paths
--
-- === Optimized Naming
--
-- Files are renamed for Claude's UI by:
--
-- * Replacing directory separators with dashes
-- * Flattening the directory structure
-- * Special handling for hidden files (e.g., .gitignore becomes dot--gitignore)
-- * Special handling for certain file types (e.g., .svg files become .xml)
--
-- This ensures that all files can be easily distinguished in Claude's UI
-- while maintaining a mapping back to their original locations. Hidden files
-- are transformed to be visible in file browsers while preserving their hidden
-- status when written back to the filesystem.

module Clod.FileSystem
  ( -- * Re-exports from FileSystem.Operations
    findAllFiles
  , safeRemoveFile
  , copyFile
  , safeReadFile
  , safeWriteFile
  , safeCopyFile
    
    -- * Re-exports from FileSystem.Detection
  , isModifiedSince
  , isTextFile
  , isTextDescription
  , needsTransformation
  , safeFileExists
  , safeIsTextFile
  
    -- * Re-exports from FileSystem.Processing
  , processFiles
  , ManifestEntry(..)
  , createOptimizedName
  , writeManifestFile
  
    -- * Re-exports from FileSystem.Transformations
  , transformFilename
  , flattenPath
  , sanitizeFilename
  , transformFileContent
  ) where

-- Re-export from FileSystem.Operations
import Clod.FileSystem.Operations (findAllFiles, safeRemoveFile, copyFile, 
                                 safeReadFile, safeWriteFile, safeCopyFile)

-- Re-export from FileSystem.Detection
import Clod.FileSystem.Detection (isModifiedSince, isTextFile, isTextDescription,
                                needsTransformation, safeFileExists, safeIsTextFile)

-- Re-export from FileSystem.Processing
import Clod.FileSystem.Processing (processFiles, ManifestEntry(..), 
                                  createOptimizedName, writeManifestFile)

-- Re-export from FileSystem.Transformations
import Clod.FileSystem.Transformations (transformFilename, flattenPath, 
                                      sanitizeFilename, transformFileContent)