#import <objc/runtime.h>
#import <objc/message.h>
#import <Foundation/Foundation.h>

static BOOL disableStorySeen = YES;
static IMP orig_setSeenState = NULL;

static void hook_setSeenState(id self, SEL _cmd, id state) {
  if (disableStorySeen) return;
  ((void(*)(id, SEL, id))orig_setSeenState)(self, _cmd, state);
}

static void reloadPrefs() {
  @autoreleasepool {
    NSDictionary *settings = [[NSDictionary alloc] initWithContentsOfFile:@"/var/mobile/Library/Preferences/com.tommy.facebooknoseen.plist"];
    if (!settings) settings = @{};
    disableStorySeen = [settings[@"disableStorySeen"] ?: @YES boolValue];
  }
}

%ctor {
  @autoreleasepool {
    reloadPrefs();

    Class cls = objc_getClass("FBSnacksSurfaceAwareSeenStateWriter");
    if (!cls) {
      NSLog(@"[noseen] class not found");
      return;
    }

    SEL sel = @selector(setSeenState:);
    Method m = class_getInstanceMethod(cls, sel);
    if (!m) {
      NSLog(@"[noseen] setSeenState: not found");
      return;
    }

    orig_setSeenState = method_getImplementation(m);
    method_setImplementation(m, (IMP)hook_setSeenState);
    NSLog(@"[noseen] hooked successfully");
  }
}
