# -*- coding: utf-8 -*-
"""中台：意见反馈管理（查看店员提交 + 客服回复）。"""
import datetime
from flask import render_template, request, redirect, url_for, flash
from flask_login import login_required

from app.models import Feedback, Staff
from app.extensions import db
from app.admin import bp
from app.admin.views import _admin_only
from app.admin.admins import _super_only
from app.services import log_action


@bp.route("/feedback")
@login_required
def feedback():
    _admin_only()
    status = (request.args.get("status") or "").strip()
    query = Feedback.query.join(Feedback.staff).filter(Staff.deleted == False)
    if status in ("pending", "replied"):
        query = query.filter(Feedback.status == status)
    items = query.order_by(Feedback.id.desc()).limit(200).all()
    return render_template("admin/feedback_list.html", items=items, status=status, active="feedback")


@bp.route("/feedback/<int:id>/reply", methods=["POST"])
@login_required
def feedback_reply(id):
    _admin_only()
    f = Feedback.query.get_or_404(id)
    reply = (request.form.get("reply") or "").strip()
    st = (request.form.get("status") or "").strip()
    if not reply:
        flash("请输入回复内容", "danger")
        return redirect(url_for("admin.feedback", status=st))
    f.reply = reply
    f.replied_at = datetime.datetime.now()
    f.status = "replied"
    log_action("feedback_reply", target_type="feedback", target_id=id,
               summary="回复意见 #%d：%s" % (id, f.title), commit=False)
    db.session.commit()
    flash("已回复", "success")
    return redirect(url_for("admin.feedback", status=st))


@bp.route("/feedback/<int:id>/delete", methods=["POST"])
@login_required
def feedback_delete(id):
    """删除联系我们记录（仅超级管理员）。意见反馈不涉及积分，纯删记录。"""
    _super_only()
    f = Feedback.query.get_or_404(id)
    title = f.title
    db.session.delete(f)
    log_action("delete_feedback", target_type="feedback", target_id=id,
               summary="删除意见 #%d：%s" % (id, title), commit=False)
    db.session.commit()
    flash("已删除", "success")
    return redirect(url_for("admin.feedback", status=(request.form.get("status") or "")))
