function reloadConfig(files)
    doReload = false
    for _,file in pairs(files) do
        if file:sub(-4) == ".lua" then
            doReload = true
        end
    end
    if doReload then
        hs.reload()
    end
end

log = hs.logger.new('init', 5)

suisApp = hs.application.find('Control Centre')
suisAX = hs.axuielement.applicationElement(suisApp)
controlCentreMenuSearch = hs.axuielement.searchCriteriaFunction({
    {attribute = 'AXRole',        value = 'AXMenuBarItem'},
    {attribute = 'AXSubrole',     value = 'AXMenuExtra'},
    {attribute = 'AXIdentifier',  value = 'com.apple.menuextra.controlcenter'}
});
sideCarMenuSearch = hs.axuielement.searchCriteriaFunction({
    {attribute = 'AXRole',        value = 'AXCheckBox'},
    {attribute = 'AXSubrole',     value = 'AXToggle'},
    {attribute = 'AXIdentifier',  value = 'controlcenter-sidecar'}
});
iPadConnectionButton = hs.axuielement.searchCriteriaFunction({
    {attribute = 'AXRole',        value = 'AXCheckBox'},
    {attribute = 'AXSubrole',     value = 'AXToggle'},
    {attribute = 'AXIdentifier',  value = 'sidecar-device-iPad'}
});

connectToSidecarItemSearchTimer = nil;
sidecarItemFound = false;

function stopConnectToSidecarItemSearchTimer()
  print("stopConnectToSidecarItemSearchTimer")
  if connectToSidecarItemSearchTimer then
    connectToSidecarItemSearchTimer:stop()
    connectToSidecarItemSearchTimer = nil
  end
end

function iPadConnectionButtonHandler(msg, results, count)
    print("iPadConnectionButtonHandler");
    if count == 0 then
        suisAX:buildTree(function(treeMsg, msgResults)
            print(hs.inspect(msgResults));
        end)
        return log:d("Can't get ipad menu entry:", msg)
    end
    sidecarItemFound = true;
    results[1]:doAXPress()
end

function sideCarMenuSearchHandler(msg, results, count)
    print("sideCarMenuSearchHandler");
    if count == 0 then
        return log:d("Can't get side car menu:", msg)
    end
    results[1]:doAXPress()
    hs.timer.doAfter(5, function() stopConnectToSidecarItemSearchTimer() end)
    connectToSidecarItemSearchTimer = hs.timer.doUntil(
        function()
            return sidecarItemFound
        end,
        function()
            suisAX:elementSearch(iPadConnectionButtonHandler, iPadConnectionButton, {count = 1, depth = 3})
        end,
        0.5
    )
end

function contrlCentreMenuSearchHandler(msg, results, count)
    print("contrlCentreMenuSearchHandler");
    if count == 0 then
        return log:d("Can't get control centre menu:", msg)
    end
    results[1]:doAXPress()
    suisAX:elementSearch(sideCarMenuSearchHandler, sideCarMenuSearch, {count = 1, depth = 2})
end

function isIpadConnected()
    for index,value in ipairs(hs.screen.allScreens()) do
        if(value:getUUID() == "225CA0A0-84E0-4C6D-B129-2C2964F1BE17") then
            return true;
        end
    end
    return false;
end
function connectIpad()
    if(isIpadConnected()) then
        return;
    end
    suisAX:elementSearch(contrlCentreMenuSearchHandler, controlCentreMenuSearch, {count = 1, depth = 2})
end

myWatcher = hs.pathwatcher.new(os.getenv("HOME") .. "/.hammerspoon/", reloadConfig):start()

hs.hotkey.bind({"ctrl", "alt"}, "left", function()
    connectIpad();
    hs.timer.waitUntil(isIpadConnected, function()
        for index,value in ipairs(hs.screen.allScreens()) do
            if(value:getUUID() == "37D8832A-2D66-02CA-B9F7-8F30A301B230") then
                value:setOrigin(0, 0);
            elseif(value:getUUID() == "225CA0A0-84E0-4C6D-B129-2C2964F1BE17") then
                value:setOrigin(-1366, 93)
            end
        end
    end)
end)

hs.hotkey.bind({"ctrl", "alt"}, "right", function()
    connectIpad();
    hs.timer.waitUntil(isIpadConnected, function()
        for index,value in ipairs(hs.screen.allScreens()) do
            if(value:getUUID() == "37D8832A-2D66-02CA-B9F7-8F30A301B230") then
                value:setOrigin(0, 0);
            elseif(value:getUUID() == "225CA0A0-84E0-4C6D-B129-2C2964F1BE17") then
                value:setOrigin(1728, 93)
            end
        end
    end)
end)
hs.console.clearConsole();
hs.alert.show("Config loaded")