import { Injectable } from '@angular/core'
import { ConfigService, HostWindowService, TranslateService } from 'tabby-core'

@Injectable({ providedIn: 'root' })
export class WebHostWindow extends HostWindowService {
    get isFullscreen (): boolean { return !!document.fullscreenElement }

    constructor (
        config: ConfigService,
        translate: TranslateService,
    ) {
        super()
        this.windowShown.next()
        this.windowFocused.next()

        const unloadHandler = (event) => {
            if (config.store.web.preventAccidentalTabClosure) {
                event.preventDefault()
                event.returnValue = translate.instant('Are you sure you want to close Tabby? You can disable this prompt in Settings -> Window.')
            } else {
                window.removeEventListener('beforeunload', unloadHandler)
            }
        }
        window.addEventListener('beforeunload', unloadHandler)
    }

    reload (): void {
        location.reload()
    }

    setTitle (title?: string): void {
        document.title = title ?? 'Tabby'
    }

    toggleFullscreen (): void {
        if (this.isFullscreen) {
            document.exitFullscreen()
        } else {
            document.body.requestFullscreen({ navigationUI: 'hide' })
        }
    }

    minimize (): void {
        throw new Error('Unavailable')
    }

    isMaximized (): boolean {
        return true
    }

    toggleMaximize (): void {
        throw new Error('Unavailable')
    }

    close (): void {
        window.close()
    }
}
