<?php
// ARQUIVO: api/importer.php
// LOCAL: Pasta api/ (public_html/api/importer.php)

set_time_limit(0);
ini_set('memory_limit', '-1');
header('Content-Type: application/json');
session_start();
require_once '../includes/db.php';

// === CONFIGURAÇÃO TMDB ===
$tmdb_key = "f99aa9ae1fe7619969cc7db0938c1ae5"; 
try {
    $stmt = $pdo->query("SELECT tmdb_api_key FROM configuracoes LIMIT 1");
    $k = $stmt->fetchColumn();
    if($k) $tmdb_key = $k;
} catch(Exception $e){}

// --- FUNÇÕES ---
function searchTMDB($query, $type, $key) {
    if(strlen($query) < 2) return null;
    $query = urlencode($query);
    $url = "https://api.themoviedb.org/3/search/$type?api_key=$key&language=pt-BR&query=$query&page=1";
    
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_TIMEOUT, 2); 
    $res = curl_exec($ch);
    curl_close($ch);
    
    $json = json_decode($res, true);
    if(!empty($json['results'][0])) {
        $r = $json['results'][0];
        $img_base = 'https://image.tmdb.org/t/p/w500';
        return [
            'cover' => $r['poster_path'] ? $img_base.$r['poster_path'] : ($r['backdrop_path'] ? $img_base.$r['backdrop_path'] : ''),
            'plot' => $r['overview'] ?? '',
            // Retorna ano e nota, mas só usaremos se a tabela permitir
            'year' => substr($r['release_date'] ?? $r['first_air_date'] ?? '', 0, 4),
            'rating' => $r['vote_average'] ?? 0
        ];
    }
    return null;
}

function cleanName($name) {
    $name = preg_replace('/[\(\[\{].*?[\)\]\}]/', '', $name);
    $name = str_replace(['MKV', 'MP4', 'AVI', 'FHD', 'HD', 'SD', '4K', 'H265', 'LEG', 'DUB', 'Dual'], '', $name);
    $name = str_replace(['-', '.', '_'], ' ', $name);
    return trim($name);
}

$action = $_POST['action'] ?? '';
$temp_file = '../temp_playlist.m3u';

// 1. BAIXAR URL
if ($action == 'download_url') {
    $url = $_POST['url'];
    if (!filter_var($url, FILTER_VALIDATE_URL)) { echo json_encode(['status'=>false, 'msg'=>'URL inválida.']); exit; }

    $fp = fopen($temp_file, 'w+');
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_TIMEOUT, 600);
    curl_setopt($ch, CURLOPT_FILE, $fp); 
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0');
    $exec = curl_exec($ch);
    curl_close($ch);
    fclose($fp);

    if (!$exec || filesize($temp_file) < 100) { echo json_encode(['status'=>false, 'msg'=>'Erro ao baixar.']); exit; }
    processCategories($temp_file);
}

// 2. UPLOAD
if ($action == 'upload_file') {
    if (!move_uploaded_file($_FILES['file']['tmp_name'], $temp_file)) { echo json_encode(['status'=>false, 'msg'=>'Erro upload.']); exit; }
    processCategories($temp_file);
}

// 3. ANALISAR CATEGORIAS
function processCategories($file) {
    if (!file_exists($file)) { echo json_encode(['status'=>false, 'msg'=>'Arquivo sumiu.']); exit; }
    $handle = fopen($file, "r");
    $categories = [];
    if ($handle) {
        while (($line = fgets($handle)) !== false) {
            // Regex flexível
            if (preg_match('/group-title=["\'](.*?)["\']/i', $line, $matches)) {
                $cat_name = trim($matches[1]); // TRIM IMPORTANTE
                if(empty($cat_name)) $cat_name = "Sem Categoria";

                $type = 'channel';
                $lower = mb_strtolower($cat_name);
                if (preg_match('/(filme|movie|vod|4k|cinema)/i', $lower)) $type = 'movie';
                elseif (preg_match('/(serie|série|novela|season)/i', $lower)) $type = 'series';

                if (!isset($categories[$cat_name])) {
                    $categories[$cat_name] = ['name' => $cat_name, 'type' => $type, 'count' => 0, 'id' => md5($cat_name)];
                }
                $categories[$cat_name]['count']++;
            }
        }
        fclose($handle);
    }
    echo json_encode(['status'=>true, 'msg'=>'Lista analisada!', 'categories'=>array_values($categories)]); exit;
}

// 4. IMPORTAÇÃO EM LOTES (CORRIGIDA)
if ($action == 'import_batch') {
    $cats_to_import = json_decode($_POST['categories'], true); 
    $offset = (int)$_POST['offset']; 
    $limit = 500; 
    
    if(!file_exists($temp_file)) { echo json_encode(['status'=>false, 'msg'=>'Arquivo expirou.']); exit; }
    
    $handle = fopen($temp_file, "r");
    $count = 0; $processed = 0; 
    
    $current_group = ''; $current_logo = ''; $current_name = '';
    
    while (($line = fgets($handle)) !== false) {
        $line = trim($line);
        if(empty($line)) continue;

        if(strpos($line, '#EXTINF') === 0) {
            preg_match('/group-title=["\'](.*?)["\']/i', $line, $g);
            // CORREÇÃO CRÍTICA: TRIM para garantir que " Filmes " vire "Filmes"
            $current_group = isset($g[1]) ? trim($g[1]) : 'Sem Categoria';
            
            $is_target = false;
            $current_type = 'channel';
            
            foreach($cats_to_import as $c) {
                // Comparação exata após o trim
                if($c['name'] === $current_group) { 
                    $is_target = true; 
                    $current_type = $c['type'];
                    break; 
                }
            }

            if($is_target) {
                $count++;
                if($count <= $offset) continue;
                
                if($processed >= $limit) {
                    fclose($handle);
                    echo json_encode(['status'=>true, 'finished'=>false, 'offset'=>$offset + $processed, 'processed'=>$processed, 'msg' => "Salvos +$processed itens..."]);
                    exit;
                }

                preg_match('/tvg-logo=["\'](.*?)["\']/i', $line, $l);
                $current_logo = $l[1] ?? '';
                $parts = explode(',', $line);
                $current_name = trim(end($parts));
                $url = trim(fgets($handle)); // Pega URL
                
                // --- INSERÇÃO ---
                try {
                    // 1. Garante Categoria
                    $stmt = $pdo->prepare("SELECT id FROM categories WHERE name = ? AND type = ?");
                    $stmt->execute([$current_group, $current_type]);
                    $cat_id = $stmt->fetchColumn();
                    if(!$cat_id) {
                        $pdo->prepare("INSERT INTO categories (name, type) VALUES (?, ?)")->execute([$current_group, $current_type]);
                        $cat_id = $pdo->lastInsertId();
                    }

                    // 2. Dados do TMDB
                    $plot = "Sinopse não disponível"; 
                    // Se quiser o ano, precisa criar coluna 'release_date' no banco. Por enquanto removemos para não dar erro.
                    
                    if($current_type == 'movie' || $current_type == 'series') {
                        $tmdb = searchTMDB(cleanName($current_name), ($current_type=='movie'?'movie':'tv'), $tmdb_key);
                        if($tmdb) {
                            if(empty($current_logo) && !empty($tmdb['cover'])) $current_logo = $tmdb['cover'];
                            if(!empty($tmdb['plot'])) $plot = $tmdb['plot'];
                        }
                    }

                    // 3. Salva no Banco (SQL AJUSTADO PARA SUAS TABELAS)
                    if($current_type == 'channel') {
                        $pdo->prepare("INSERT INTO channels (name, stream_url, category_id, logo_url) VALUES (?, ?, ?, ?)")
                            ->execute([$current_name, $url, $cat_id, $current_logo]);
                    } 
                    elseif($current_type == 'movie') {
                        // Removidos rating e release_date pois sua tabela não tem
                        $pdo->prepare("INSERT INTO movies (name, stream_url, category_id, cover_url, description) VALUES (?, ?, ?, ?, ?)")
                            ->execute([$current_name, $url, $cat_id, $current_logo, $plot]);
                    } 
                    elseif($current_type == 'series') {
                        // Removidos rating e release_date pois sua tabela não tem
                        $pdo->prepare("INSERT INTO series (name, category_id, cover_url, description) VALUES (?, ?, ?, ?)")
                            ->execute([$current_name, $cat_id, $current_logo, $plot]);
                    }
                    $processed++;
                } catch(Exception $e) {
                    // Erros de SQL (duplicidade, etc) são ignorados para não parar o loop
                }
            }
        }
    }
    
    fclose($handle);
    echo json_encode(['status'=>true, 'finished'=>true, 'offset'=>$offset + $processed, 'processed'=>$processed, 'msg' => "Concluído! Total: " . ($offset + $processed)]);
}
?>
