
// Created by Jaime O. Rios

// This file allows access to the C runtime for issuing commands to p4 and p4vc

#import <Foundation/Foundation.h>

@interface P4Functionality : NSObject


@property (atomic) NSString * _Nonnull userHomePathSettings; // e.g. .bash_login

@property (atomic) BOOL     p4Installed;
@property (atomic) NSString * _Nullable p4Path;

@property (atomic) BOOL     p4vcInstalled;
@property (atomic) NSString * _Nullable p4vcPath;

@property (atomic) BOOL     P4CONFIG_Set;
@property (strong) NSString * _Nullable p4ClientName;

- (void)checkSettings;

/**
 Precondition(s):
 - p4 command line installed
 - p4vc command line installed
 - P4CONFIG environment variable already set
 - query to 'p4 info' does not return 'Client unknown.'
 
 Postcondition(s):
 - Returns status as to whether above items are actually fulfilled
 
 Invariant(s):
 - Current project is what is used to check the P4CONFIG path
 */
- (BOOL)p4ClientSet;

- (void)updateP4Status;
- (void)updateP4VCStatus;

// Older functions
- (void)p4vcRevGraph;
- (void)p4vcTimeLapse;

// Newer functions
/**
 Precondition(s):
 - The following member variables are nonnil:
 -- _p4Path
 -- _p4ClientName
 - The _P4CONFIG_Set variable is equal to YES
 */
- (NSString* _Nonnull)issueP4EditForFile:(NSString* _Nonnull)fileToBeCheckedOut;
- (NSString* _Nonnull)issueP4AddForFile:(NSString* _Nonnull)fileToBeAdded;
- (NSString* _Nonnull)issueP4RevertForFile:(NSString* _Nonnull)fileToBeReverted;
- (NSString* _Nonnull)issueP4InfoForFolder:(NSString* _Nonnull)folderPath;

- (NSString* _Nonnull)displayP4VCRevGraphForFileAtPath:(NSString* _Nonnull)filePath;
- (NSString* _Nonnull)displayP4VCTimeLapseForFileAtPath:(NSString* _Nonnull)filePath;

@end

