//
//  APIMocks.swift
//  TuskerUITests
//
//  Created by Shadowfacts on 12/30/19.
//  Copyright © 2019 Shadowfacts. All rights reserved.
//

import Foundation
import Ambassador

fileprivate let notFound = ["error": "Record not found"]

extension Router {
    func allRoutes() {
        instanceRoutes()
        accountRoutes()
        timelineRoutes()
        notificationRoutes()
    }
    
    func instanceRoutes() {
        self["/api/v1/instance"] = JSONResponse(handler: { (_) in
            return [
                "description": "An instance description",
                "max_toot_chars": 500,
                "thumbnail": "http://localhost:8080/thumbnail.png",
                "title": "Localhost",
                "uri": "http://localhost:8080",
                "version": "2.7.2",
                "urls": [:]
            ]
        })
    }
    
    func accountRoutes() {
        let selfAccount: [String: Any] = [
            "id": "1",
            "username": "admin",
            "acct": "admin",
            "display_name": "Admin Account",
            "locked": false,
            "created_at": "2019-12-31T11:13:42.0Z",
            "followers_count": 0,
            "following_count": 0,
            "statuses_count": 0,
            "note": "My profile description.",
            "url": "http://localhost:8080/users/admin",
            "avatar": "http://localhost:8080/avatar/admin.jpg",
            "avatar_static": "http://localhost:8080/avatar/admin.jpg",
            "header": "http://localhost:8080/header/admin.jpg",
            "header_static": "http://localhost:8080/header/admin.jpg",
            "emojis": []
        ]
        self["/api/v1/accounts/verify_credentials"] = JSONResponse(result: selfAccount)
        self["/api/v1/accounts/\\d+/statuses"] = JSONResponse(result: [])
        self["/api/v1/accounts/(\\d+)"] = DelegatingResponse { (ctx) in
            if ctx.captures[0] == "1" {
                return JSONResponse(result: selfAccount)
            } else {
                return JSONResponse(statusCode: 404, statusMessage: "Not Found", result: notFound)
            }
        }
    }
    
    func timelineRoutes() {
        let emptyTimeline: [Any] = []
        self["/api/v1/timelines/home"] = JSONResponse(result: emptyTimeline)
        self["/api/v1/timelines/public"] = JSONResponse(result: emptyTimeline)
    }
    
    func notificationRoutes() {
        let emptyTimeline: [Any] = []
        self["/api/v1/notifications"] = JSONResponse(result: emptyTimeline)
    }
}