use camino::Utf8PathBuf;
use iri_string::types::UriAbsoluteString;

use crate::vscode_sys;

pub mod change_editor_contents;
pub mod changed_filesystem_contents;
pub mod move_path;
pub mod open_text_editor;
pub mod open_workspace_folder;
pub mod request_file_decoration;
pub mod request_inline_credit;
pub mod request_tracked_contents;
pub mod update_resource_states;

#[derive(Debug)]
pub struct EditorContentsChange {
    pub character_offset: u32,
    pub characters_replaced: u32,
    pub replacement_text: String,
}

pub enum Event {
    OpenWorkspaceFolder {
        workspace_uri: UriAbsoluteString,
    },
    OpenTextEditor {
        uri: UriAbsoluteString,
        text_editor: vscode_sys::reference::TextEditorRef,
    },
    ChangeEditorContents {
        uri: UriAbsoluteString,
        changes: Vec<EditorContentsChange>,
    },
    MovePath {
        old_uri: UriAbsoluteString,
        new_uri: UriAbsoluteString,
    },
    ChangedFilesystemContents {
        uri: UriAbsoluteString,
    },
    RequestInlineCredit {
        uri: UriAbsoluteString,
    },
    RequestTrackedContents {
        uri: UriAbsoluteString,
        deferred_promise: request_tracked_contents::DeferredPromise,
    },
    RequestFileDecoration {
        uri: UriAbsoluteString,
        deferred_promise: request_file_decoration::DeferredPromise,
    },
    UpdateResourceStates {
        repository_path: Utf8PathBuf,
    },
}