// Copyright (c) 2019, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

import 'dart:async';

import 'package:nnbd_migration/src/preview/preview_site.dart';
import 'package:analysis_server/src/status/pages.dart';

/// A page displayed on the preview site.
abstract class PreviewPage extends Page {
  /// The site containing the page.
  final PreviewSite site;

  /// Initialize a newly created page within the given [site]. The [id] is the
  /// portion of the path to the page that follows the initial slash ('/').
  PreviewPage(this.site, String id) : super(id, '', description: '');

  /// Whether pages of this type require authorization.
  bool get requiresAuth;

  /// Generate the content of the body tag.
  void generateBody(Map<String, String> params);

  /// Generate the content of the head tag.
  void generateHead() {
    buf.writeln('<meta charset="utf-8">');
    buf.writeln('<meta name="viewport" content="width=device-width, '
        'initial-scale=1.0">');
    buf.writeln('<title>${site.title}</title>');
  }

  @override
  Future<void> generatePage(Map<String, String> params) async {
    buf.writeln('<!DOCTYPE html><html lang="en">');
    buf.writeln('<head>');
    buf.writeln('</head>');
    generateHead();
    buf.writeln('<body>');
    generateBody(params);
    buf.writeln('</body>');
    buf.writeln('</html>');
  }
}
