const express = require('express');
const router = express.Router();
const jwt = require('jsonwebtoken');
const Admin = require('../models/Admin');
const authMiddleware = require('../middleware/auth');

// Login
router.post('/login', async (req, res) => {
  try {
    const { username, password } = req.body;

    if (!username || !password) {
      return res.status(400).json({
        success: false,
        message: 'Kullanıcı adı ve şifre gereklidir'
      });
    }

    const admin = await Admin.findByUsername(username);
    
    if (!admin) {
      return res.status(401).json({
        success: false,
        message: 'Geçersiz kullanıcı adı veya şifre'
      });
    }

    const isValidPassword = await Admin.verifyPassword(password, admin.password);
    
    if (!isValidPassword) {
      return res.status(401).json({
        success: false,
        message: 'Geçersiz kullanıcı adı veya şifre'
      });
    }

    const token = jwt.sign(
      { id: admin.id, username: admin.username },
      process.env.JWT_SECRET,
      { expiresIn: process.env.JWT_EXPIRES_IN }
    );

    res.json({
      success: true,
      data: {
        token,
        admin: {
          id: admin.id,
          username: admin.username,
          email: admin.email
        }
      },
      message: 'Giriş başarılı'
    });
  } catch (error) {
    console.error('Login error:', error);
    res.status(500).json({
      success: false,
      message: 'Giriş yapılırken bir hata oluştu'
    });
  }
});

// Get current admin info
router.get('/me', authMiddleware, async (req, res) => {
  try {
    res.json({
      success: true,
      data: req.admin
    });
  } catch (error) {
    console.error('Get admin info error:', error);
    res.status(500).json({
      success: false,
      message: 'Kullanıcı bilgileri getirilemedi'
    });
  }
});

// Register new admin (protected route)
router.post('/register', authMiddleware, async (req, res) => {
  try {
    const { username, email, password } = req.body;

    if (!username || !email || !password) {
      return res.status(400).json({
        success: false,
        message: 'Tüm alanlar gereklidir'
      });
    }

    // Check if username or email already exists
    const existingUsername = await Admin.findByUsername(username);
    const existingEmail = await Admin.findByEmail(email);

    if (existingUsername) {
      return res.status(400).json({
        success: false,
        message: 'Kullanıcı adı zaten kullanımda'
      });
    }

    if (existingEmail) {
      return res.status(400).json({
        success: false,
        message: 'E-posta adresi zaten kullanımda'
      });
    }

    const admin = await Admin.create({ username, email, password });
    
    res.status(201).json({
      success: true,
      data: admin,
      message: 'Admin başarıyla oluşturuldu'
    });
  } catch (error) {
    console.error('Register error:', error);
    res.status(500).json({
      success: false,
      message: 'Kayıt olurken bir hata oluştu'
    });
  }
});

module.exports = router;