//  APIClient.h
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>

NS_ASSUME_NONNULL_BEGIN

@interface APIClient : NSObject

+ (void)requestAccessItem:(void(^)(BOOL success, NSDictionary * _Nullable response, NSError * _Nullable error))completion;

+ (void)requestGetUnitPlan:(void(^)(BOOL success, NSDictionary * _Nullable response, NSError * error))completion;

+ (void)requestSettingsByLocation:(NSString * _Nonnull)locationID
                       completion:(void(^)(BOOL success, NSDictionary * _Nullable response, NSError * error))completion;

+ (void)submitAddIssue:(NSDictionary * _Nonnull)params
                images:(NSArray<UIImage *> * _Nullable)images
            completion:(void(^)(BOOL success, NSDictionary * _Nullable response, NSError * error))completion;

+ (void)submitUpdateIssue:(NSDictionary * _Nonnull)updateData
                   images:(NSArray<UIImage *> * _Nullable)images
              completion:(void(^)(BOOL success, NSDictionary * _Nullable response, NSError * _Nullable error))completion;

+ (void)requestAppointment:(void(^)(BOOL success, NSDictionary * _Nullable response, NSError * error))completion;

+ (void)requestGeneralInfo:(void(^)(BOOL success, NSDictionary * _Nullable response, NSError * error))completion;

+ (void)submitAppointment:(NSDictionary *)appointmentData
                 completion:(void(^)(BOOL success, NSDictionary * _Nullable response, NSError * _Nullable error))completion;

+ (void)submitRepresentativeAppointment:(NSDictionary *)repData
                                 completion:(void(^)(BOOL success, NSDictionary * _Nullable response, NSError * _Nullable error))completion;

+ (void)requestCancelAppointment:(id)appointmentId
                        reason:(NSString *)reason
                    completion:(void(^)(BOOL success, NSDictionary * _Nullable response, NSError * error))completion;

+ (void)requestDashboardInfo:(void(^)(BOOL success, NSDictionary * _Nullable response, NSError * error))completion;

+ (void)requestClientAnnouncement:(void(^)(BOOL success, NSDictionary * _Nullable response, NSError * error))completion;

+ (void)requestHistory:(NSString *)issueID
          completion:(void(^)(BOOL success, NSDictionary * _Nullable response, NSError * error))completion;

+(void)submitAddInfo:(NSString *)issueID
            remarks:(NSString *)remarks
         completion:(void(^)(BOOL success, NSDictionary * _Nullable response, NSError * error))completion;

+ (void)uploadAddInfo:(NSString *)issueID
              remarks:(NSString *)remarks
               images:(NSArray<UIImage *> *)images
             mediaURL:(NSURL *)mediaURL
            mediaType:(NSString *)mediaType
           completion:(void(^)(BOOL success, NSDictionary * _Nullable response, NSError * error))completion;

+ (void)requestIssues:(void(^)(BOOL success, NSDictionary * _Nullable response, NSError * error))completion;

+ (void)requestVoidIssue:(id)issueID
               remarks:(NSString *)remarks
            completion:(void(^)(BOOL success, NSDictionary * _Nullable response, NSError * error))completion;

+ (void)requestDeleteIssue:(id)issueID
               remarks:(NSString *)remarks
            completion:(void(^)(BOOL success, NSDictionary * _Nullable response, NSError * error))completion;

+ (void)requestCommonArea:(void(^)(BOOL success, NSDictionary * _Nullable response, NSError * error))completion;

+ (void)requestGeneralSettings:(void(^)(BOOL success, NSDictionary * _Nullable response, NSError * error))completion;

+ (void)requestDefectMatrix:(void(^)(BOOL success, NSDictionary * _Nullable response, NSError * error))completion;

+ (void)requestProjectList:(void(^)(BOOL success, NSDictionary * _Nullable response, NSError * error))completion;

+ (void)requestArrayImage:(NSArray *)imageArray
                completion:(void(^)(BOOL success, NSDictionary * _Nullable response, NSError * error))completion;

+ (void)downloadAndCacheImage:(NSURL *)url
                   completion:(void (^)(BOOL success, NSString *filePath))completion; 

+ (void)requestCompanyCode:(NSString *)companyCode
                  completion:(void(^)(BOOL success, NSDictionary * _Nullable response, NSError * error))completion;

+ (void)requestThirdPartyList:(void(^)(BOOL success, NSDictionary * _Nullable response, NSError * _Nullable error))completion;

+ (void)createThirdPartyLink:(NSString *)title
                     lotId:(NSString *)lotId
                  completion:(void(^)(BOOL success, NSDictionary * _Nullable response, NSError * _Nullable error))completion;

+ (void)updateThirdPartyLink:(NSDictionary *)payload
                  completion:(void(^)(NSDictionary * _Nullable response,NSError * _Nullable error))completion;

+ (void)requestProfile:(void(^)(BOOL success, NSDictionary * _Nullable response, NSError * _Nullable error))completion;

+ (void)deleteProfile:(void(^)(BOOL success, NSDictionary * _Nullable response, NSError * _Nullable error))completion;

+ (void)editProfile:(NSString *)name
        completion:(void(^)(BOOL success, NSDictionary * _Nullable response, NSError * _Nullable error))completion;

+ (void)requestNotification:(void(^)(BOOL success, NSDictionary * _Nullable response, NSError * _Nullable error))completion;

+ (void)requestAnnouncement:(void(^)(BOOL success, NSDictionary * _Nullable response, NSError * _Nullable error))completion;

+ (void)uploadProfileImage:(NSData *)imageData
                      name:(NSString *)name
                completion:(void(^)(BOOL success,
                                    NSDictionary * _Nullable response,
                                    NSError * _Nullable error))completion;

@end

NS_ASSUME_NONNULL_END
