<?php
require_once dirname(__DIR__) . '/config/config.php';
require_once dirname(__DIR__) . '/includes/db.php';
require_once dirname(__DIR__) . '/includes/auth.php';
require_once dirname(__DIR__) . '/includes/functions.php';
require_once dirname(__DIR__) . '/includes/api.php';
require_once dirname(__DIR__) . '/includes/functions_tags.php';

apiRequireMethod('POST');
apiRequireCsrf();

$action = (string)($_POST['action'] ?? '');
$songId = isset($_POST['song_id']) ? (int)$_POST['song_id'] : 0;

try {
    if ($action === 'add') {
        $tagName = trim((string)($_POST['tag_name'] ?? ''));
        if ($songId <= 0 || $tagName === '') {
            apiError('태그 이름을 입력해 주세요.', 'VALIDATION_ERROR', 400);
        }
        addTagToSong($songId, $tagName);
        $tags = getSongTags($songId);
        apiSuccess(
            ['tags' => $tags],
            '태그를 추가했습니다.',
            [],
            ['tags' => $tags]
        );
    }

    if ($action === 'remove') {
        $tagId = isset($_POST['tag_id']) ? (int)$_POST['tag_id'] : 0;
        if ($songId <= 0 || $tagId <= 0) {
            apiError('요청 값이 올바르지 않습니다.', 'INVALID_REQUEST', 400);
        }
        removeTagFromSong($songId, $tagId);
        $tags = getSongTags($songId);
        apiSuccess(
            ['tags' => $tags],
            '태그를 제거했습니다.',
            [],
            ['tags' => $tags]
        );
    }

    apiError('알 수 없는 요청입니다.', 'INVALID_REQUEST', 400);
} catch (Throwable $e) {
    apiHandleThrowable($e, 'SERVER_ERROR', 500, [
        'action' => $action,
        'song_id' => $songId,
    ]);
}
