import Foundation import OrgSocialKit enum UploaderFactory { static func makeUploader() -> (any FeedUploader)? { let d = UserDefaults.standard let method = UploadMethod(rawValue: d.string(forKey: "uploadMethod") ?? "") ?? .vfile switch method { case .vfile: guard let raw = d.string(forKey: "vfileURL"), let url = URL(string: raw) else { return nil } return VFileUploader(tokenURL: url) case .github: let token = d.string(forKey: "githubToken") ?? "" let owner = d.string(forKey: "githubOwner") ?? "" let repo = d.string(forKey: "githubRepo") ?? "" guard !token.isEmpty, !owner.isEmpty, !repo.isEmpty else { return nil } return GitHubUploader(token: token, owner: owner, repo: repo, path: d.string(forKey: "githubPath") ?? "social.org", branch: d.string(forKey: "githubBranch") ?? "main") case .codeberg: let token = d.string(forKey: "codebergToken") ?? "" let owner = d.string(forKey: "codebergOwner") ?? "" let repo = d.string(forKey: "codebergRepo") ?? "" guard !token.isEmpty, !owner.isEmpty, !repo.isEmpty else { return nil } return CodebergUploader(token: token, owner: owner, repo: repo, path: d.string(forKey: "codebergPath") ?? "social.org", branch: d.string(forKey: "codebergBranch") ?? "main", instance: d.string(forKey: "codebergInstance") ?? "https://codeberg.org") case .webdav: guard let raw = d.string(forKey: "webdavURL"), let url = URL(string: raw) else { return nil } return WebDAVUploader(url: url, username: d.string(forKey: "webdavUsername"), password: d.string(forKey: "webdavPassword")) } } }