import 'dart:convert';

import 'package:http/http.dart' as http;

import '../../../api_params.dart';
import '../../nextcloud_ocs.dart';
import '../get_poll/get_poll_state_response.dart';
import '../talk_api.dart';
import 'vote_poll_params.dart';

class VotePoll extends TalkApi<GetPollStateResponse> {
  // Body als echtes JSON (nicht form-encoded wie die anderen Endpunkte): nur
  // so kommt das int-Array an; sonst liest der Server optionIds als [] und
  // löscht die eigene Stimme (Ursache des Readonly-Fallbacks, Issue #42).
  VotePoll({
    required String token,
    required int pollId,
    required VotePollParams params,
  }) : super(
         'v1/poll/$token/$pollId',
         params,
         headers: {'Content-Type': 'application/json'},
       );

  @override
  GetPollStateResponse assemble(String raw) =>
      GetPollStateResponse.fromJson(NextcloudOcs.decode(raw));

  @override
  Future<http.Response>? request(
    Uri uri,
    ApiParams? body,
    Map<String, String>? headers,
  ) {
    if (body is! VotePollParams) return null;
    return http.post(uri, headers: headers, body: jsonEncode(body.toJson()));
  }
}
