// Automatic FlutterFlow imports
import '/backend/schema/structs/index.dart';
import '/flutter_flow/flutter_flow_theme.dart';
import '/flutter_flow/flutter_flow_util.dart';
import 'index.dart'; // Imports other custom actions
import '/flutter_flow/custom_functions.dart'; // Imports custom functions
import 'package:flutter/material.dart';
// Begin custom action code
// DO NOT REMOVE OR MODIFY THE CODE ABOVE!

// ⬇⬇⬇ PLAK VANAF HIER — de drie importregels horen erbij! ⬇⬇⬇
// Zonder 'package:http' faalt de build met: Undefined name 'http'.

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

Future<dynamic> evenementCreate(
  String sessionName,
  String sessionId,
  String token,
  String horecagelegenheidNid,
  String titel,
  String datumStart,
  String? datumEind,
  String? omschrijving,
  String? entreeTid,
  String? entreePrijs,
  String? toelichtingEntree,
  String? ticketsUrl,
  String? websiteUrl,
  List<String>? categorieTids,
  String? logoFid,
  List<String>? fotosFids,
) async {
  final horecaNidInt = int.tryParse(horecagelegenheidNid.trim());
  if (horecaNidInt == null) {
    return {'success': false, 'error': 'Kies eerst een horecagelegenheid'};
  }
  if (titel.trim().isEmpty) {
    return {'success': false, 'error': 'Titel is verplicht'};
  }
  if (datumStart.trim().isEmpty) {
    return {'success': false, 'error': 'Datum is verplicht'};
  }

  // Einddatum mag niet vóór de startdatum liggen (P2-29 / A3).
  // Beide komen binnen als 'yyyy-MM-dd HH:mm:ss'; DateTime.tryParse
  // accepteert die vorm. Een lege einddatum betekent: geen einddatum.
  if ((datumEind ?? '').trim().isNotEmpty) {
    final start = DateTime.tryParse(datumStart.trim());
    final eind = DateTime.tryParse(datumEind!.trim());
    if (start != null && eind != null && eind.isBefore(start)) {
      return {
        'success': false,
        'error': 'De einddatum ligt vóór de startdatum',
      };
    }
  }

  final body = <String, dynamic>{
    'horecagelegenheid_nid': horecaNidInt,
    'titel': titel.trim(),
    'datum_start': datumStart.trim(),
  };

  if ((datumEind ?? '').trim().isNotEmpty) {
    body['datum_eind'] = datumEind!.trim();
  }
  if ((omschrijving ?? '').trim().isNotEmpty) {
    body['omschrijving'] = omschrijving!.trim();
  }
  if ((entreeTid ?? '').trim().isNotEmpty) {
    final tid = int.tryParse(entreeTid!.trim());
    if (tid != null) body['entree_tid'] = tid;
  }
  if ((entreePrijs ?? '').trim().isNotEmpty) {
    body['entree_prijs'] = entreePrijs!.trim();
  }
  if ((toelichtingEntree ?? '').trim().isNotEmpty) {
    body['toelichting_entree'] = toelichtingEntree!.trim();
  }
  if ((ticketsUrl ?? '').trim().isNotEmpty) {
    body['tickets_url'] = ticketsUrl!.trim();
  }
  if ((websiteUrl ?? '').trim().isNotEmpty) {
    body['website_url'] = websiteUrl!.trim();
  }
  if (categorieTids != null && categorieTids.isNotEmpty) {
    final tids = categorieTids
        .map((e) => int.tryParse(e.trim()))
        .whereType<int>()
        .toList();
    if (tids.isNotEmpty) body['categorie_tids'] = tids;
  }
  if ((logoFid ?? '').trim().isNotEmpty) {
    final fid = int.tryParse(logoFid!.trim());
    if (fid != null) body['logo_fid'] = fid;
  }
  if (fotosFids != null && fotosFids.isNotEmpty) {
    final fids =
        fotosFids.map((e) => int.tryParse(e.trim())).whereType<int>().toList();
    if (fids.isNotEmpty) body['fotos_fids'] = fids;
  }

  final headers = <String, String>{
    'Accept': 'application/json',
    'Content-Type': 'application/json',
  };
  if (sessionName.trim().isNotEmpty && sessionId.trim().isNotEmpty) {
    headers['Cookie'] = '$sessionName=$sessionId';
  }
  if (token.trim().isNotEmpty) {
    headers['X-CSRF-Token'] = token;
  }

  final base = FFAppState().apiBaseUrl.trim().isEmpty
      ? 'https://uitgaanskrant.com'
      : FFAppState().apiBaseUrl.trim();
  final url = '$base/en/flutterdrup/evenementen/create.json';
  print('========================================');
  print('EVENEMENT CREATE');
  print('URL  : $url');
  print('BODY : ${jsonEncode(body)}');
  print('========================================');

  try {
    final response = await http
        .post(Uri.parse(url), headers: headers, body: jsonEncode(body))
        .timeout(const Duration(seconds: 30));

    print('========================================');
    print('STATUS : ${response.statusCode}');
    print('BODY');
    print(response.body);
    print('========================================');

    dynamic data;
    try {
      data = jsonDecode(response.body);
    } catch (_) {
      data = response.body;
    }

    if (response.statusCode >= 200 && response.statusCode < 300) {
      return {
        'success': true,
        'nid': data is Map ? (data['nid']?.toString() ?? '') : '',
        'status': data is Map ? (data['status']?.toString() ?? '') : '',
      };
    }

    if (response.statusCode == 403) {
      return {
        'success': false,
        'statusCode': 403,
        'error': 'Deze horecagelegenheid is niet van jou',
      };
    }

    return {
      'success': false,
      'statusCode': response.statusCode,
      'error': data is Map
          ? ((data['message'] ?? data['error'] ?? data).toString())
          : data.toString(),
    };
  } on TimeoutException {
    return {'success': false, 'error': 'Timeout'};
  } catch (e, stack) {
    print(e);
    print(stack);
    return {'success': false, 'error': e.toString()};
  }
}

