/**
 * Git operation error types
 */
export class GitOperationError extends Error {
  constructor(
    message: string,
    public readonly operation: string,
    public readonly cause?: Error
  ) {
    super(message);
    this.name = "GitOperationError";
  }
}

/**
 * Options for cloning a repository
 */
export interface CloneOptions {
  url: string;
  localPath: string;
  branch?: string;
}

/**
 * Options for creating a branch
 */
export interface CreateBranchOptions {
  localPath: string;
  branchName: string;
  checkout?: boolean;
}

/**
 * Options for committing changes
 */
export interface CommitOptions {
  localPath: string;
  message: string;
  files?: string[];
}

/**
 * Options for pushing changes
 */
export interface PushOptions {
  localPath: string;
  remote?: string;
  branch?: string;
  force?: boolean;
}

/**
 * Git configuration
 */
export interface GitConfig {
  userName: string;
  userEmail: string;
}
