<?php

    // به جای مخفی کردن کامل خطاها، آن‌ها را در یک فایل لاگ ذخیره می‌کنیم تا سرور کرش نکند اما ما دلیل را بفهمیم
    ini_set('display_errors', 0); 
    ini_set('log_errors', 1); 
    ini_set('error_log', 'mp3_input_errors.log'); // خطاها در این فایل ذخیره می‌شوند
    error_reporting(E_ALL);

    header("Content-Type: text/html; charset=utf-8");
    header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
    header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
    header("Cache-Control: no-store, no-cache, must-revalidate");
    header("Cache-Control: post-check=0, pre-check=0", false);
    header("Pragma: no-cache");
    header("X-Content-Type-Options: nosniff");
    header("X-Frame-Options: deny");
    header("X-XSS-Protection: 1; mode=block");
    
    require_once('jdf.php');
    
    $default_mp3_directory =  "./".jdate('y/m/d/');
    $default_mp3_address =  "https://dl.niyazmusic.ir/".jdate('y/m/d/');
    
    $mp3_comment = "niyazmusic.ir";
    $mp3_album = "";
    $mp3_year = date("Y");
    $mp3_genre = "";
    
    $DATA_SET = file_get_contents('php://input');
    if($DATA_SET){
        $DATA = json_decode($DATA_SET, true);
        $mp3_filepath = $DATA['url'];
        $mp3_quality = $DATA['q'];
        $mp3_cover = $DATA['cover'];
        $mp3_songname = trim($DATA['title']).' (NiyazMusic.Ir)';
        $mp3_artist = trim($DATA['singer']);
        $mp3_album = isset($DATA['album']) && !empty($DATA['album']) ? trim($DATA['album']) : '';
        $mp3_filename = (!empty(trim($mp3_artist)) ? $mp3_artist.' - ' : '').trim($DATA['title']).($mp3_quality == 128 ? ' (128)' : '').'.mp3';
        
        if(isset($DATA['dir']) && !empty($DATA['dir'])){
            $dir = trim($DATA['dir']);
            if(substr($dir, -1) != '/'){
                $dir = $dir.'/';
            }
            
            if(isset($DATA['break']) && $DATA['break'] == 1){
                $dir = str_replace('//', '/', $dir);
                $dirArr = explode('/', $dir);
                $myFolder = end($dirArr);
                if(empty($myFolder)){
                    $myFolder = trim($dirArr[count($dirArr)-2]);
                }
                
                if($mp3_quality == 128){
                    $dir = (substr($dir, -1) == '/' ? $dir : $dir.'/').$myFolder.' (128)/';
                }
                else{
                    $dir = (substr($dir, -1) == '/' ? $dir : $dir.'/').$myFolder.'/';
                }
            }
            
            $default_mp3_directory =  "./".$dir;
            $default_mp3_address =  "https://dl.niyazmusic.ir/".$dir;
        }
    
        if(!is_dir($default_mp3_directory)){
            if(!mkdir($default_mp3_directory, 0777, true)){
                echo 'error_mkdir'; // خطا در ساخت پوشه
                die();
            }
        }
        
        
        $sname = $default_mp3_directory.$mp3_filename;
        $res = array();
        
        if(!filter_var($mp3_filepath,FILTER_VALIDATE_URL)){
            echo 1;
            die();
        }
        
        
        if(copy($mp3_filepath,$sname)){
            $mp3_tagformat = 'UTF-8';
            require_once('getid3/getid3.php');
            $mp3_handler = new getID3;
            $mp3_handler->setOption(array('encoding'=>$mp3_tagformat));
            require_once('getid3/write.php');
            $mp3_writter = new getid3_writetags;
            $mp3_writter->filename       = $sname;
            $mp3_writter->tagformats     = array('id3v1', 'id3v2.3');
            $mp3_writter->overwrite_tags = true;
            $mp3_writter->tag_encoding   = $mp3_tagformat;
            $mp3_writter->remove_other_tags = true;
            $mp3_data['title'][]   = $mp3_songname;
            $mp3_data['artist'][]  = $mp3_artist;
            $mp3_data['album'][]   = $mp3_album;
            $mp3_data['year'][]    = $mp3_year;
            $mp3_data['genre'][]   = $mp3_genre;
            $mp3_data['comment'][] = $mp3_comment;
            
            // --- مدیریت خطای دانلود کاور ---
            $cover_data = @file_get_contents($mp3_cover);
            if($cover_data !== false){
                $mp3_data['attached_picture'][0]['data'] = $cover_data;
                 $mp3_data['attached_picture'][0]['picturetypeid'] = 3;
                $mp3_data['attached_picture'][0]['description'] = (!empty(trim($mp3_artist)) ? $mp3_artist.' - ' : '') .$mp3_songname;
                $mp3_data['attached_picture'][0]['mime'] = 'image/jpeg';
            } else {
                // اگر کاور دانلود نشد، در فایل لاگ ذخیره می‌کنیم تا بدانیم
                error_log("Failed to download cover: " . $mp3_cover);
            }
            // -------------------------------
              
            $mp3_writter->tag_data = $mp3_data;
            if($mp3_writter->WriteTags()) {
                echo $default_mp3_address.$mp3_filename;
                die();
            }
            else{
                echo 2;
                die();
            }
        }
        else{
            // این بخش در کد قبلی وجود نداشت و علت خالی موندن پاسخ بود!
            echo 'error_copy'; 
            error_log("Failed to copy MP3 from: " . $mp3_filepath); // ذخیره دلیل در فایل لاگ
            die();
        }
    }
    
    else{
        echo 3;
        die();
    }