from django.http import JsonResponse
from django.views.decorators.http import require_GET
from .services import log_service
import json
from django.views.decorators.http import require_http_methods


@require_GET
def read_log_view(request):
    """
    读取日志接口 - 唯一的外部访问接口
    """
    task_id = request.GET.get('task_id')
    last_n_lines = request.GET.get('last_n_lines')

    if not task_id:
        return JsonResponse({'status': 'error', 'message': '缺少task_id参数'})

    try:
        if last_n_lines:
            lines = log_service.read_log(task_id, int(last_n_lines))
        else:
            lines = log_service.read_log(task_id)

        return JsonResponse({
            'status': 'success',
            'logs': lines,
            'exists': log_service.log_exists(task_id)
        })

    except Exception as e:
        return JsonResponse({'status': 'error', 'message': str(e)})


from django.views.decorators.csrf import csrf_exempt


@csrf_exempt
@require_http_methods(["DELETE", "POST"])
def remove_old_logs(request):
    """
    API 视图：移除指定 task_id 的陈旧日志文件。
    从请求体中获取task_id参数。
    """
    try:
        # 从请求体中解析JSON数据
        if request.body:
            data = json.loads(request.body)
            task_id = data.get('task_id', '').strip()
        else:
            task_id = request.GET.get('task_id', '').strip()

        if not task_id:
            return JsonResponse(
                {
                    'success': False,
                    'message': '错误：参数 task_id 不能为空。'
                },
                status=400)

        # 调用清除方法
        from .services import log_service
        success, message = log_service.clear(task_id)

        if success:
            return JsonResponse({'success': True, 'message': message})
        else:
            return JsonResponse({
                'success': False,
                'message': message
            },
                                status=500)

    except json.JSONDecodeError:
        return JsonResponse(
            {
                'success': False,
                'message': '错误：请求体必须是有效的JSON格式。'
            }, status=400)
    except Exception as e:
        return JsonResponse({
            'success': False,
            'message': f'服务器错误: {str(e)}'
        },
                            status=500)
