// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;

import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
import "@openzeppelin/contracts/access/Ownable.sol";

/**
 * @title TestUSDT
 * @dev 测试网专用 USDT 代币，任何人都可以免费 mint
 *
 * 部署步骤:
 * 1. 使用 Remix IDE (https://remix.ethereum.org)
 * 2. 连接 MetaMask 到 BSC Testnet (Chain ID: 97) 或 KAVA Testnet (Chain ID: 2221)
 * 3. 部署此合约
 * 4. 调用 mint() 函数给自己铸造代币
 */
contract TestUSDT is ERC20, Ownable {
    uint8 private _decimals;

    constructor() ERC20("Test USDT", "USDT") Ownable(msg.sender) {
        _decimals = 6; // USDT 标准是 6 位小数
        // 初始铸造 1,000,000 USDT 给部署者
        _mint(msg.sender, 1_000_000 * 10 ** _decimals);
    }

    function decimals() public view virtual override returns (uint8) {
        return _decimals;
    }

    /**
     * @dev 任何人都可以给自己 mint 代币 (仅限测试网使用!)
     * @param amount 铸造数量 (注意: 需要乘以 10^6, 例如 1000 USDT = 1000000000)
     */
    function mint(uint256 amount) external {
        _mint(msg.sender, amount);
    }

    /**
     * @dev 便捷函数: 直接输入 USDT 数量，自动处理精度
     * @param usdtAmount USDT 数量 (例如输入 1000 就是 1000 USDT)
     */
    function mintUsdt(uint256 usdtAmount) external {
        _mint(msg.sender, usdtAmount * 10 ** _decimals);
    }

    /**
     * @dev Owner 可以给任意地址 mint
     */
    function mintTo(address to, uint256 amount) external onlyOwner {
        _mint(to, amount);
    }

    /**
     * @dev 水龙头功能: 一次性领取 10000 USDT
     */
    function faucet() external {
        _mint(msg.sender, 10_000 * 10 ** _decimals);
    }
}
